我有两个程序完全符合我的要求。我试图将它们组合成一个程序,这是我需要一些帮助的地方。
程序#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
'''
我想要的是结合他们的功能。假设我必须处理一个包含2000多万行(或更多行)文本的文件。我可能无法做到 读入整个文件并创建一个巨大的列表,如程序#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说的内容'在下部打印部分未知。另外,如果可能的话,在写入文件时,我不希望在程序#2的输出中出现数据之间的空格。
答案 0 :(得分:0)
我刚想通了:
date | timestamp | predicted_value
2017-10-25| 21758492893 | 0.4
2017-10-25| 21758492917 | 0.3
2017-10-25| 21758493210 | 0.4
2017-10-25| 21758493782 | 0.2
2017-10-25| 21758494903 | 0.1
2017-10-26| 21758492893 | 7.2
....