打印特定行txt文件python

2024-04-20 00:15:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文本文件要分析。我试图找到每一行包含某些字符(例如:“@”),然后打印位于它前面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

它不会工作(当我给它输入一个包含“@”行的文件时,它不会打印任何内容),有什么想法吗?在


Tags: intxtnewforindexiflineopen
3条回答

好的,问题是当您在第11行重试时,您已经完全遍历了第4行中的文件描述符file。所以第11行将生成一个空循环。也许只迭代一次文件并记住最后几行是更好的主意。。。在

file = open('new_file.txt', 'r')
a = ["","",""]
for line in file:
    if "@" in line:
        print(a[0], end="")
    a.append(line)
    a = a[1:]

对于文件IO,程序员时间和运行时使用reg-ex来匹配模式通常是最有效的。通过文件中的行进行迭代。你的问题真的不是问题。在

import re
file = open('new_file.txt', 'r')
document = file.read()
lines = document.split("\n")
LinesOfInterest = []
for lineNumber,line in enumerate(lines):
    WhereItsAt = re.search( r'@', line)
    if(lineNumber>2 and WhereItsAt):
        LinesOfInterest.append(lineNumber-3)
print LinesOfInterest
for lineNumber in LinesOfInterest:
    print(lines[lineNumber])

感兴趣的行现在是符合条件的行号列表

我用过

^{pr2}$

作为投入产出

[0, 4, 8, 12]
line1,0
line1,1
line1,2
line1,3

首先,您要多次浏览该文件,而不会在以后的时间重新打开它。这意味着所有后续的文件迭代尝试都将立即终止,而不会读取任何内容。在

第二,你的索引逻辑有点复杂。假设你的文件相对于你的内存大小不是很大,那么简单地把整个文件读入内存(作为一个列表)并在那里操作它就容易多了。在

myfile = open('new_file.txt', 'r')    
a = myfile.readlines();
for index, item in enumerate(a):
    if '@' in item and index - 3 >= 0:
       print a[index - 3].strip()

这已经在以下输入上进行了测试:

^{pr2}$

相关问题 更多 >