6

このコードで何が起こっているのか説明できますか? forループで同時にすべての文を読むのではなく、ファイルを開いて1行ずつ読む方法を理解していないようです。ありがとう

ドキュメント ファイルに次の文があるとします。

cat:dog:mice
cat1:dog1:mice1
cat2:dog2:mice2
cat3:dog3:mice3

コードは次のとおりです。

from sys import argv

filename = input("Please enter the name of a file: ")
f = open(filename,'r')

d1ct = dict()
print("Number of times each animal visited each station:")
print("Animal Id           Station 1           Station 2")

for line in f:
     if '\n' == line[-1]:
          line = line[:-1]
     (AnimalId, Timestamp, StationId,) = line.split(':')
     key = (AnimalId,StationId,)
     if key not in d1ct:
          d1ct[key] = 0
     d1ct[key] += 1
4

2 に答える 2

8

魔法は次の場所にあります。

for line in f:
     if '\n' == line[-1]:
          line = line[:-1]

Pythonfileオブジェクトは、for ループで反復できるという点で特別です。反復ごとに、ファイルの次の行を取得します。改行の可能性がある行の最後の文字が含まれているため、最後の文字を確認して削除すると便利なことがよくあります。

于 2012-11-13T02:18:24.517 に答える
7

Moshe が書いたように、開いているファイル オブジェクトは反復できます。ただ、それらはfilePython 3.x のタイプではありません (Python 2.x の場合のように)。ファイル オブジェクトがテキスト モードで開かれている場合、反復の単位は\n.

を使用して、末尾の withesspacesline = line.rstrip()を削除できます。\n

ファイルの内容を一度に (複数行の文字列に) 読み取りたい場合は、content = f.read().

コードに小さなバグがあります。開いているファイルは常に閉じておく必要があります。f.close()for ループの後に使用することを意味します。または、ファイルを閉じる新しい構造に open をラップすることもできます。後者のwithアプローチに慣れることをお勧めします。

于 2012-11-13T09:11:40.970 に答える