2

我正在尝试从文本文件中读取大约 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 多个值?

4

3 回答 3

17

因为您的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()(Note: readlines, not ) 代替,但这会在迭代之前readline将所有行读入一个巨大的数组中。infile直接对文件对象进行迭代只会一次将最新的读取行保留在内存中。

于 2012-12-30T07:44:26.043 回答
0

为什么我们不能只使用

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

for i in f1:
f2.writelines(i)

f2.close()
于 2014-08-11T13:36:22.740 回答
-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()
于 2012-12-30T08:02:25.483 回答