2

ユーザーに対して 5 行のテキスト ドキュメントを読み取るプログラムを作成しようとしていますが、うまく動作させることができません。現在、4 行目と 5 行目が "\n" (改行) とともに出力されます。これはコードです:

filename = 'text_file_example.txt'
myfile = open(filename,'r')
myfile.readlines(5)
print(myfile.readlines(5))
myfile.close()

for(range 5) ループで 1 行を読む方がよいでしょうか?

4

4 に答える 4

4

使用している組み込み関数readlines()は、次のことを行います(公式ドキュメントから):

f.readlines()ファイル内のすべてのデータ行を含むリストを返します。オプションのパラメータが与えられた場合sizehint、ファイルからそのバイト数と行を完了するのに十分な量を読み取り、そこから行を返します。

おそらく、あなたはそれをしたいかもしれません:

filename = 'text_file_example.txt'
myfile = open(filename,'r')
file_lines = myfile.readlines()
for line in file_lines[:5]: 
    print(line)
myfile.close()
于 2012-12-21T10:36:57.630 に答える
0

読み取る行数を制限する場合は、ファイルオブジェクトを反復可能として使用してから、次を使用して行をスライスitertools.isliceします。

import itertools

filename = 'text_file_example.txt'
with open(filename,'r') as myfile:
    # skip five
    list(itertools.islice(myfile, 5))
    print(*itertools.islice(myfile, 5), sep='', end='')  # print 5, use newlines from file

構文を使用して、5つの読み取り行をprint()1つのオブジェクトとしてではなく、一連の引数として関数に渡してから、自動スペース文字と改行文字を無効にすることに注意してください。*行はスペースで区切る必要はなく、すでに改行が含まれています。

上記のコードは、ファイルのサイズに関係なく、ファイルの10行のみを読み取ります呼び出し.readlines()は、サイズや使用可能なメモリに関係なく、ファイル全体をメモリに読み込みます(しようとします)。

于 2012-12-21T10:40:11.717 に答える
0

ドキュメントによると:

If given an optional parameter sizehint, 
it reads that many bytes from the file and 
enough more to complete a line, and returns the lines from that

したがって、最良のオプションは for ループを使用することです。

for line in myfile.readlines()[:5]:
    print line
于 2012-12-21T10:35:55.943 に答える
0

readlines()すべての行のリストを返すので、おそらく次のようにする必要があります。

lines=myfile.readlines()[:5]

ただし、すべての行をロードするため、メモリ効率が良くありません。

したがって、ここでのより良い解決策は、次を使用することitertools.isliceです。

list(islice(myfile,5)) # it'll return a list of first five lines,
                       # no need of reading all lines
于 2012-12-21T10:35:39.247 に答える