Python 从给定行和列号复制输入文件

Python 从给定行和列号复制输入文件,python,Python,我是一个新手,对Python编程非常陌生。我一直在为我的工作开发一个Python程序(旧版本2.5.2)。它应该通过两个测试条件来找到所需数据的开始。下面的代码确实适用于此 然后它应该写一个包含测试发现的信息的文件,从第10位的第nr行开始,一直到/eof标记。毫无疑问,下面的代码有些不完整,但说明了我试图遵循的路线 当我尝试使用我所遵循的方法时,我一直得到一个“值错误:混合迭代和读取方法会丢失数据”。我不完全理解到底是什么导致了这个错误的发生。如有任何意见或建议,将不胜感激。顺便说一句,我不能

我是一个新手,对Python编程非常陌生。我一直在为我的工作开发一个Python程序(旧版本2.5.2)。它应该通过两个测试条件来找到所需数据的开始。下面的代码确实适用于此

然后它应该写一个包含测试发现的信息的文件,从第10位的第nr行开始,一直到/eof标记。毫无疑问,下面的代码有些不完整,但说明了我试图遵循的路线

当我尝试使用我所遵循的方法时,我一直得到一个“值错误:混合迭代和读取方法会丢失数据”。我不完全理解到底是什么导致了这个错误的发生。如有任何意见或建议,将不胜感激。顺便说一句,我不能在下一个()中使用想法。谢谢


问题可能是因为您正在使用

对于nr,枚举(f)中的行:
行=f.readlines()
同时进行

实际上,当您在for循环中使用枚举时:

=>
对于nr,枚举(f)中的行:

然后您已经从变量
行中的文件中读取了一行,然后再次读取变量
行中循环中的文件

=>
lines=f.readlines()

这可能会导致数据丢失,因为您正在更改文件指针的位置
f

在下一次迭代中,它将不会出现在预期的位置。(最有可能是前面一行)

因此,要么删除这一行[
lines=f.readlines()
],要么执行以下操作:


这是因为您在文件上循环使用enumerate(f)
中的
行作为nr,然后在其中得到
lines=f.readlines()
。。。这里有另一种方法,它坚持只对行进行迭代,而不需要将剩余的行加载到内存中

from itertools import islice, izip, tee, dropwhile

try:
    fin = open('input')
    fout = open('output', 'w')
    fst, snd = tee(fin)
    snd.next()
    dropwhile(lambda L: not (L[0].startswith('/origin') and L[1].startswith('03 00 01')), izip(fst, snd)).next()
    fout.writelines(islice(fin, 10, None))
except StopIteration:
    print "Looks like we didn't find data to use..."
finally:
    fin.close()
    fout.close()

当行不符合标准时,我们跳过文件,然后从该点开始,我们跳过10行,并将从该点到文件末尾的行写入输出

完全回溯后,您也正在将
previous
初始化为
None
,然后尝试将其切片
previous[0:7]
@kroolik实际上它是
,OP已将其初始化为
'
。。。奇怪。。。但是…对不起,我没注意到!第一次看到有人定义一个
none
变量。回溯:File“p9.py,行中15行=f.readlines()#读取文件中的everthin并将其存储在列表中。ValueError:混合迭代和读取方法将丢失数据。@user2994541您可以将您的问题包含在信息中。我将检查此方法。很抱歉,我不清楚,但我声明数据从第nr行的第10位开始,然后从第10位开始。@user2994541所以,ar你是说你可以跳过前9行吗?如果是的话,我不明白为什么要额外检查?
while True:
    line=f.readline()
    if not line:
        break
from itertools import islice, izip, tee, dropwhile

try:
    fin = open('input')
    fout = open('output', 'w')
    fst, snd = tee(fin)
    snd.next()
    dropwhile(lambda L: not (L[0].startswith('/origin') and L[1].startswith('03 00 01')), izip(fst, snd)).next()
    fout.writelines(islice(fin, 10, None))
except StopIteration:
    print "Looks like we didn't find data to use..."
finally:
    fin.close()
    fout.close()