Python - 读取,解析和写回文件

时间:2012-12-30 07:34:30

标签: python parsing

我试图从文本文件中读取大约5000行代码,然后解析并将解析后的值存储到另一个文本文件中。

但是,我只能对前967行执行此操作(如输出文件所示,其中仅包含前967行的已解析值)。

这是我写这篇文章的简单代码。

infile = open("Input.txt", "r")
outfile = open("Output.txt", "w")
for line in infile.readline():
    temp = infile.readline()
    value = temp.split("<_|_>")
    outfile.write(value[1])

我如何编写其他4000多个值?

3 个答案:

答案 0 :(得分:16)

因为for迭代不在infile的行上,而是在第一行中的字符上。可能第一行的长度是967个字符。

for line in infile.readline()表示您正在从infile读取第一行作为字符串。字符串是可迭代的,就像迭代它们迭代字符串中的字符一样。因此,每次为该行中的每个字符运行循环。

你想要做的事情可能是这样的事情:

with open("Input.txt", "r") as infile, open("Output.txt", "w") as outfile:
    for line in infile:
        outfile.write(line.split("<_|_>")[0])

Python中的文件对象也是可迭代的。迭代它们遍历每一行。您可以使用for line in infile.readlines()(注意:readlines,而不是readline),但这会将infile中的所有行读入一个巨大的数组在迭代之前。直接在文件对象上进行迭代只能将最新的读取行保留在内存中。

答案 1 :(得分:0)

为什么我们不能使用

f1 = open('Input.txt','r')
f2 = open('Output.txt','w')

for i in f1:
f2.writelines(i)

f2.close()

答案 2 :(得分:-1)

您应该阅读每一行并解析。您正在输入文件中的单行上执行for循环。一个简单的方法是使用while循环

f1 = open('Input.txt','r')
f2 = open('Output.txt','w')
line = f1.readline()
while line:    
    value = line.split('<_|_>')
    f2.write(value[0])
    line = f1.readline()