0

私はこのコードを書きました

for i in range(40):
    f=open('file.txt','r')
    if i%2==1:
        f.readlines()[i]

しかし、コンソールには何も出力されませんでした。

一方、このように書くと、次のようになります:-

for i in range(40):
    f=open('fil.txt','r')
    if i%2==1:
        p=f.readlines()[i]
        print p

なぜそうなのか。f.readlines()コンソールでは動作しますが、ループ内では動作しないのはなぜですか?

4

5 に答える 5

0

あなたがコンソールと呼んでいるのは、おそらく対話型インタープリターです。対話式インタープリターでは、式の結果が自動的に表示されるため、電卓のように使用できます。read-eval-printループを実行します。準備されたプログラムを実行する場合、出力ステップ (技術的には読み取りステップも) は想定されていないため、実行したい場合は要求する必要があります。

まったく別の問題は、ファイル全体を 40 回読み取り、毎回行に分割する方法です。20 行だけを印刷するつもりです。おそらくループを次のように書き直します。

f=open('fil.txt','r')
for i in range(40):
    p=f.readline()
    if i%2==1:
        print p

私が fe を使用しない理由for line in file('filename'):は、ファイル全体を処理するつもりがないからです。範囲を for 行に配置すると、制限が一目でわかります。

于 2013-10-03T08:21:16.807 に答える
0

毎回ファイルを開く必要はなく、毎回ファイルの内容を読み取る必要もありません (そして、コードの最初のビットでまったく印刷していません):

from itertools import islice

with open('file') as fin:
    for line in islice(fin, 1, 40, 2):
        print line

上記のコードは、ファイルから奇数番号の行を出力します。

于 2013-10-03T08:13:32.237 に答える