2017-09-02 20 views
4

ファイルから25行目から55行目を読みたいのですが、その範囲は30行でなければならないので、1つの数値と6行しか出力していないようです。特定の行を番号で出力する

hamlettext = open('hamlet.txt', 'r') 
for i in range (25,55): 
    data = hamlettext.readlines(i) 

print(i) 
print(data) 

出力:

54 
['\n', 'Mar.\n', 'O, farewell, honest soldier;\n', "Who hath reliev'd you?\n"] 

答えて

4

使用組み込みenumerate機能:

for i, line in enumerate(hamlettext): 
    if i in range(25, 55): 
     print(i) 
     print(line) 
+0

ありがとうございます!どちらの答えもうまくいきます。列挙は、各行の引用符を使わずに、少しきれいに印刷することができました。これは単なる列挙の中に組み込まれたクリーンアップですか? – aiwan

+0

@aiwan:ドキュメントによると、 'enumerate'はcount(startからのデフォルトは0)とiteratingから得られた値を含むタプルを返します。ファイルの場合、 '(0、 'これは最初の行\ n')'のようなペアを作成し、行の位置を追跡するために使用できます。私の答えでハイパーリンクをクリックすると、 'enumerate'についてもっと読むことができます。 –

+0

ありがとう! – aiwan

-2

だからあなたの上の最後の行を印刷しているコードでi。 25行から55行までのすべての行を読むには、ループ内のデータを印刷する必要があります。

hamlettext = open('hamlet.txt', 'r') 
    for i in range (25,55): 
     data = hamlettext.readlines(i) 

     print(i) 
     print(data) 
+0

'readlines(i)'は 'i'行をファイルから取り出さないので、これは間違っています。 msgstr ""オプションのパラメータ 'sizehint'を指定すると、ファイルからそのバイト数を読み込み、行を完成させるのに十分なバイト数を読み込み、その行を返します。 –

2

あなたが行のリストを取得するためにスライスし、完全にそのファイルを読み込むことができます。ファイルが大きい場合

with open('hamlet.txt', 'r') as f: 
    data = f.readlines()[25:55] 

を、しかし、それは、25行をスキップする方が良いでしょう、そして読み、その後、出

with open('hamlet.txt', 'r') as f: 
    for i, line in enumerate(hamlettext): 
     if i < 25: 
      continue 
     elif i >= 55: 
      break 
     else: 
      print(i,line.rstrip()) 

はまた、あなたがテキストエディタで行番号を比較している場合は、1オフセット(のpythonが0であっ開始しています、編集者は、1で始まることに注意してください:何のために千個の他の行を読んで回避するために、ループの、そうすることができますenumerate(hamlettext,1)を正しく修正してください。