我有一个文本文件要分析。我试图找到每一行包含某些字符(例如:“@”),然后打印位于它前面3行的行(例如:如果第5行包含“@”,我想打印第2行) 到目前为止我得到的是:
file = open('new_file.txt', 'r')
a = list()
x = 0
for line in file:
x = x + 1
if '@' in line:
a.append(x)
continue
x = 0
for index, item in enumerate(a):
for line in file:
x = x + 1
d = a[index]
if x == d - 3:
print line
continue
它不会工作(当我给它输入一个包含“@”行的文件时,它不会打印任何内容),有什么想法吗?在
好的,问题是当您在第11行重试时,您已经完全遍历了第4行中的文件描述符
file
。所以第11行将生成一个空循环。也许只迭代一次文件并记住最后几行是更好的主意。。。在对于文件IO,程序员时间和运行时使用reg-ex来匹配模式通常是最有效的。通过文件中的行进行迭代。你的问题真的不是问题。在
感兴趣的行现在是符合条件的行号列表
我用过
^{pr2}$作为投入产出
首先,您要多次浏览该文件,而不会在以后的时间重新打开它。这意味着所有后续的文件迭代尝试都将立即终止,而不会读取任何内容。在
第二,你的索引逻辑有点复杂。假设你的文件相对于你的内存大小不是很大,那么简单地把整个文件读入内存(作为一个列表)并在那里操作它就容易多了。在
这已经在以下输入上进行了测试:
^{pr2}$相关问题 更多 >
编程相关推荐