[英]Printing specific lines txt file python
我有一个要分析的文本文件。 我正在尝试查找包含某些字符的每一行(例如:“ @”),然后在其之前打印位于三行的行(例如:如果第5行包含“ @”,我想打印第二行)我到目前为止所得到的:
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
它不起作用(当我将包含“ @”的行输入文件时,它什么也不打印),有什么主意吗?
首先,您要遍历文件多次,而无需在以后的时间重新打开它。 这意味着所有后续迭代文件的尝试将立即终止,而不读取任何内容。
其次,您的索引逻辑有些混乱。 假设您的文件相对于内存大小而言并不庞大,那么将整个内容读入内存(作为列表)并在那里进行操作要容易得多。
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()
已在以下输入上对此进行了测试:
PrintMe
PrintMe As Well
Foo
@Foo
Bar@
hello world will print
null
null
@@
对于文件IO,使用正则表达式匹配模式通常对于程序员的时间和运行时最有效。 与遍历文件中各行的迭代结合。 您的问题确实不是问题。
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])
兴趣线现在是符合您条件的行号列表
我用了
line1,0
line2,0
line3,0
@
line1,1
line2,1
line3,1
@
line1,2
line2,2
line3,2
@
line1,3
line2,3
line3,3
@
作为投入收益
[0, 4, 8, 12]
line1,0
line1,1
line1,2
line1,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:]
您可以使用类似这样的东西。
class RingBuffer(object):
def __init__(self, size):
self.list = [None for i in xrange(size)]
def append(self, x):
self.list.pop(0)
self.list.append(x)
buf = RingBuffer(4)
lines = [
'111',
'@222',
'333',
'444',
'@555',
'@666',
'777',
'888'
]
for l in lines:
buf.append(l)
if ('@' in l):
print ("{0}".format(buf.list[0]))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.