0

我正在尝试用 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 个零。

任何帮助表示赞赏。

4

2 回答 2

2

如果您尝试打印任何字符与后面的 12 个字符相同的所有行:

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

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

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

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。而且您可能还希望从所有prints 中去掉括号。)


无论哪种方式,我都不知道你甚至想用count. 如果您想在此过程中保持匹配计数,请移动count = 0循环外部,并在count += 1每次打印某些内容时执行此操作,但不要尝试使用它来索引行或类似的东西。

于 2013-05-14T19:49:36.053 回答
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]
于 2013-05-14T19:49:27.373 回答