私はまさに2つのプログラムを持っています。私はそれらを1つのプログラムにまとめようとしています。そして、これは私が助けを必要とする場所です。ファイルを読み込み、処理し、チャンクでファイルに書き込む
プログラム#1は、ファイル全体を読み込み、readlines()処理してから新しいファイルに書き込みます。完璧に動作します。
コード:
datafile = "d:\\python\\workbook\\countries-raw.txt"
with open(datafile, "r") as file:
content = file.readlines()
content = [i.strip('\n') for i in content if '\n' in i]
content = [i for i in content if i != ""]
content = [i for i in content if i != "Top of Page"]
content = [i for i in content if len(i) != 1]
print(content)
newfile = "d:\\python\\workbook\\countries-raw-2.txt"
with open(newfile, "w") as file2:
for i in content:
file2.write(i + '\n')
プログラム#2は、一度にチャンク、Xラインでファイルを読み込みます。その後、一度にX行のデータを に出力します。また、意図したとおりに動作します。
サンプル出力を持つコード:
textfile = "d:\\mark\\python\\test.txt"
def read_n(file, x):
with open(file, mode='r') as fh:
while True:
data = ''.join(fh.readline() for _ in range(x))
if not data:
break
yield data
for nlines in read_n(textfile, 5):
print(nlines)
'''
abc
123
def
456
ghi
789
jkl
abc
123
def
456
ghi
789
jkl
abc
123
def
456
ghi
789
jkl
abc
123
def
456
ghi
789
jkl
'''
私は望んでいます、何がその機能を組み合わせることです。 2千万(またはそれ以上)のテキスト行を含むファイルを処理する必要があるとします。私は がファイル全体を読んで、プログラム#1のような巨大なリストを作成することができないかもしれません。 1行で
読む:それは不必要に遅くなるよう
しかし、これはそうです。 行を処理します。 行を書きます。 ファイル全体が処理されるまで繰り返します。
私は私の第二のプログラムのロジックがここに素晴らしいことだ考えていた:
読むXの行。 すべてのX行を処理します。 行を書きます(私が行っていることに応じて正確にXではないかもしれません)。 ファイル全体が処理されるまで繰り返します。
この私が持っているものですが、それは動作しません。最低でも(。最終的理解が処理された後、リスト内のコンテンツを注意[コンテンツ]が正しい)
textfile = "d:\\python\\workbook\\countries-raw.txt"
newfile = "d:\\python\\workbook\\temp-2.txt"
def read_n(file, x):
with open(file, mode='r') as fh:
while True:
data = ''.join(fh.readline() for _ in range(x))
content = data.split('\n')
content = [i for i in content if i != ""]
content = [i for i in content if i != "Top of Page"]
content = [i for i in content if len(i) != 1]
if not content:
break
yield content
for nlines in read_n(textfile, 50):
with open(newfile, "w") as file2:
for item in content:
content.write(item + '\n')
print(nlines)
私はスコープの問題を持っていますPyCharmは下位の印刷セクションで 'content'が不明であるためです。また、可能であれば、ファイルが書き込まれるときに、プログラム#2の出力に表示されるように、データ間にスペースを入れたくありません。