0

.txt ファイルを読み取ってチェックするプログラムを Python で作成しようとしています。

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 行後の行と同じすべての行を印刷しようとしている場合、必要なループは 1 つだけであるという点で単純ですが、リストではなく行の反復子があるという点でより複雑なので、できます。このようにランダムにアクセスしないでください。

ファイルが十分に小さい場合の簡単な修正方法の 1 つは、リストを作成することです。

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ます。また、すべての s から括弧を削除したい場合もありますprint。)


いずれにせよ、あなたが何をしようとしているのかさえわかりません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 に答える