我有一个.dat文件,其中包含超过40,000行包含文本和数据的文件。我想根据以下内容从此文件中提取特定数据:
显然我需要一个行计数器,所以当我到达文件末尾时我知道。 我想打开文件进行阅读,另一个用于写入,并阅读第一行。如果从第一行开始的第2行位置以“Model”开头,我想打开一个空行到打开的文件进行写入,然后在文件中向前跳过两行。如果从开头行开始的第二行不是以“Model”开头,那么我希望从第一行开始选择8个位置的文本并将其打印到打开的文件中进行写入。然后我将从第一行移动11个位置,依此类推。
infile = open("ratios.dat","r")
outfile = open("corr_ratios.txt","w")
for aline in infile:
items = (aline+2).split()
if items[0] = "Model"
outfile.write("\n")
aline = aline+2
else
items = aline+8
outfile.write(items)
答案 0 :(得分:2)
python中的文件是它们自己的迭代器,可以一次使用/高级一行:
with open('path-to-file.txt') as infile:
for line in infile:
# code here to deal with line.
此外,因为文件句柄是迭代器,所以它也可以显式推进:
with open('path-to-file.txt') as infile:
for line in infile:
if condition:
# skip a line
next(infile)
结合这两者,你应该能够使用直线,跳过线等。
仔细检查了您发布的代码后,您尝试将一个整数添加到字符串(aline + 2
)。为了更接近你的尝试方法,你实际上会做这样的事情:
lines = infile.readlines()
for lineno, line in enumerate(lines):
targetline = lines[lineno + 2]
此方法将整个文件加载到内存中,根据您的文件大小,这可能适合也可能不适合。