用于匹配文件中的行的Python程序

时间:2013-05-14 19:43:19

标签: python

我正在尝试在python中编写一个程序来读取.txt文件并检查

If line[i] == line [i+12]:
    print line[i]

到目前为止,我有:

f=open('file.txt', "r")

count=0
for line in f:
    while count < 1000:
        print(count)
        if line(count) == line(count+12):
            print (line(count))
        count+=1

我的输出是1000个零。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:2)

如果您正在尝试打印所有字符与之后的12个字符相同的行:

for line in f:
    for i, c in enumerate(line[:-12]):
        if c == line[i+12]:
            print(line)
            break

如果您尝试打印的所有行与之后的12行相同,则更简单,因为您只需要一个循环,但更复杂的是您有一个迭代器行,而不是列表,所以你不能像这样随机访问它。

一个简单的解决方法,如果文件足够小,就是 make 一个列表:

lines = list(f)
for i, line in enumerate(lines[:-12]):
    if line == lines[i+12]:
        print(line)

更好的解决方法是使用itertools创建迭代器的移位副本(实际上可以解决这两个问题):

lines, lines12 = itertools.tee(f, 2)
lines12 = islice(lines12, 12, None)
for line, line12 in zip(lines, lines12):
    if line == line12:
        print(line)

(如果您使用的是Python 2.x,则需要在itertools.izip使用zip,而不是print。而且您也可能想要取消所有count的括号峰)


无论哪种方式,我都不知道你甚至试图用count = 0做什么。如果你想在整个过程中保持匹配数,请在循环外移动count += 1,并在每次打印时执行{{1}},但不要尝试使用它来索引行或这样的事情。

答案 1 :(得分:0)

buffer = []
with open('file.txt', 'r') as f
  for line in f:
    if len(buffer) < 12:
      buffer.append[line]
      continue
    if line == buffer[0]:
      print line
    buffer = buffer[1:11] + [line]