pythonであるデータをファイルにかきこみたいです。
python
1#!/usr/bin/env python 2 3hoge_dict = {} 4 5for line in f1: 6 hoge_dict[line.split(';')[0]] = line.rstrip() 7 hoge_dict[line.split('\n')[0]] = line2.rstrip() 8for line in f2: 9 line = line.rstrip() 10 line2 = line2.rstrip() 11 if line in hoge_dict: 12 f3.write(str(hoge_dict[line]) + '\n') 13 print(hoge_dict[line])
ファイルf1
123456;764365
765472;825695
746174;956798
のようなデータが10万近く入っています
ファイルf2
467678
123456
758989
のようなデータが10万近く入っています
今、このコードはファイル1の;より左部分とファイル2が一致した場合ファイル1の内容が出力されるように作りました。
しかし、出力だけではなく別のファイるにその結果を保存したいと思い、その保存方法をお伺いしたいです。
123456;764365
.....
のように開業されて保存されるのが望ましいです。
テキストファイルに入れようと思っています。
うまく質問ができず申し訳ありません。答えていただけたら幸いです。
コードの上の部分が大きくなってしまっているのは気にしないでください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/10 02:57
回答5件
0
ベストアンサー
改行する一番簡単な方法は、改行文字を追加することです。
Python
1f3.write(str(hoge_dict[line]) + '\n')
コメントを受けて
即興で作ったソート用のスクリプトです。即興なので多分クソです。
Python
1import sys 2 3if len(sys.argv) != 2: 4 exit() 5 6src_filename = sys.argv[1] 7with open(src_filename) as f: 8 data_list = [line.rstrip() for line in f.readlines()] 9 10data_list.sort(key=lambda x: int(x.split(';')[0])) 11src_filename = src_filename.split('.') 12dst_filename = src_filename[0] + '_sorted.' + src_filename[1] 13 14with open(dst_filename, 'w') as f: 15 for datum in data_list: 16 f.write(datum + '\n')
コマンドラインでデータを与えればソートします。
>python sort.py file1.txt >python sort.py file2.txt
適当に作ったスクリプトで人様のデータをぶっ壊すのが怖すぎるので、非破壊的にしました。
『ファイル名 + _sorted + 拡張子』という名前で新しく保存します。
クソコード第二弾。
Python
1with open('./file1_sorted.txt') as f: 2 value_list = [line.rstrip() for line in f] 3 4with open('./file2_sorted.txt') as f: 5 key_list = [line.rstrip() for line in f] 6 7for key in key_list: 8 count = 0 9 for value in value_list: 10 if key == value.split(';')[0]: 11 print(value) 12 count += 1 13 else: 14 print(count) 15 value_list = value_list[count:] 16 break
いちおう、次のテストデータをパス。(テストデータが滅茶苦茶小さいが)
file1_sorted.txt
123;890 123;789 123;456 234;678 456;789 456;960 1234;550
file2_sorted.txt
123 234 456
実行結果
>python hoge.py 123;890 123;789 123;456 3 234;678 1 456;789 456;960 2
投稿2017/10/10 04:55
編集2017/10/10 11:38総合スコア35660
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/10 09:55
2017/10/10 10:03
2017/10/10 10:03
2017/10/10 10:04
2017/10/10 10:04
2017/10/10 10:08
2017/10/10 10:10
2017/10/10 10:10
2017/10/10 10:10
2017/10/10 10:11
2017/10/10 10:13
2017/10/10 10:16 編集
2017/10/10 10:22
2017/10/10 10:27
2017/10/10 10:30
2017/10/10 10:32
2017/10/10 10:34
2017/10/10 10:39
2017/10/10 10:42
2017/10/10 10:46
2017/10/10 10:49
2017/10/10 10:57
2017/10/10 11:00
2017/10/10 11:16
2017/10/10 11:27
2017/10/10 11:28
2017/10/10 11:30
2017/10/10 11:32
2017/10/10 11:34 編集
2017/10/10 11:36
2017/10/10 11:38
2017/10/10 11:40
2017/10/10 11:52
2017/10/10 11:54
2017/10/10 11:58
2017/10/10 12:00
2017/10/10 12:09
2017/10/10 12:14
2017/10/10 12:16
2017/10/10 12:39
2017/10/10 12:44
2017/10/10 12:47
2017/10/13 10:32
2017/10/13 15:10
2017/10/13 15:11
0
@aaa12さん、
なるほどですね、これはどうですか↓
f1 = open('1.txt', 'r') f3 = open('3.txt', 'w') for f1_lines in f1: f2 = open ('2.txt', 'r') for f2_lines in f2: if(f1_lines.split(';')[0].rstrip() == f2_lines.rstrip()): f3.write(f1_lines) f2.close() f3.close() f1.close()
※答えじゃなかったら、遠慮なくお知らせください
投稿2017/10/10 09:22
総合スコア117
0
毎回ファイルに結果書きたいなら、改行する必要があると思います。
例えば:
f = open('abc.txt', 'w') f.write("123\n") f.write("456\n") f.clode() #このようにも書けます↓ f = open('abc.txt', 'w') f.writelines(["abc\n","def\n"]) f.close()
投稿2017/10/10 02:14
総合スコア117
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/10 02:25
2017/10/10 02:39
2017/10/10 02:43
2017/10/10 02:59
0
書き込むファイルを開く際に、上書きモード('w')ではなく追記モード('a')にするとデータが順次書き込まれていきます。
質問のコードだと
f = open('abc.txt', 'w')
を
f = open('abc.txt', 'a')
にすれば良いです。
投稿2017/10/10 02:06
総合スコア6915
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。