こんにちは。Python3についての質問があります。お時間がある際にお答えいただければ幸いです。
###目標
アウトライン:
テキストファイル1に書き込まれたデータの一部分だけをテキストファイル2に書き込みたい。
(現在は簡単のため非常に小さいファイルを扱っているが、将来的には数GBほどの大きいファイルを扱いたい。)
詳細:
Python3のコードを実行しa.txtに表示した100行3列のリストを読み込み、1行目から10行目までのみを抽出して、b.txtに改めて書き込むという作業をしたい。(これを一気に行いたい。)
使用するデータを表示するためのコード(can110さんに教えていただきました。):
Python3
1import numpy as np 2 3b = np.arange(0.005, 0.05, 0.0001) 4c = np.arange(1.5, 2.51, 0.01) 5 6# ファイルに書き込み 7with open('a.txt','w') as f: 8 for a in range(1,101): 9 f.write('{:<3d} {:<3f} {:<3f}\n'.format(a,b[a-1],c[a-1])) 10 11# ファイルから読み込み 12#Without this part, data only show up on the 'a.txt'. 13with open('a.txt','r') as f: 14 for line in f: 15 print(line.rstrip('\n'))
このコードに続けて、b.txtに書き込むコードを書きたい。
###試したこと(追記:アメリカ時間6:47pm)
Python3
1import numpy as np 2 3b = np.arange(0.005, 0.05, 0.0001) 4c = np.arange(1.5, 2.51, 0.01) 5 6# ファイルに書き込み 7with open('a.txt','w') as f: 8 for a in range(1,101): 9 f.write('{:<3d} {:<3f} {:<3f}\n'.format(a,b[a-1],c[a-1])) 10 11# ファイルから読み込み 12#Without this part, data only show up on the 'a.txt'. 13with open('a.txt','r') as f: 14 for line in f: 15 with open('b.txt', 'w') as f: 16 for a in range(1,11): 17 f.write('{:<3d} {:<3f} {:<3f}\n'.format(a,b[a-1],c[a-1])) 18 print(line.rstrip('\n')) 19
これを実行すると、b.txtに1〜10行目まで表示されるのですが、ターミナル上に各行x10回ずつ表示されてしまいます。ループの部分に問題があるのは明らかなのですが、いじってみてもインデントがマッチしないということでどうしても正常に実行できません。
###調べたこと、参考ウェブサイトなど
How to read a large file, line by line
Read large text files in Python, line by line
上記ウェブサイトでinfileやfileobjectなどが出てきたのですが、理解できませんでした。
###実行環境
macOS Mojave
Atom 1.31.2
不足情報があれば随時追加しますのでご指摘ください。よろしくおねがいします。
回答2件
あなたの回答
tips
プレビュー