Martijn Pieters はすでに簡単で完全な答えを出していますが、これらのことを自分で理解する方法を学ぶ価値があります。通常は高速であり、半ダースの反対票を投じることはありません。
まず、使用できるfor line in f:
ということは、缶と同じようにループf
で使用できるという点で、明らかに何らかのリストっぽいオブジェクトであることを意味します。技術的には、これは「反復可能」であることを意味します。for
list
たぶん、これはすでにlist
? もしそうなら、あなたはすでに終わっています。そうでない場合、list
関数は iterable を取り、それを alist
にするので、追加するだけでf = list(f)
完了です。
どのように見つけますか?
コードに追加print(type(f))
して、出力される内容を確認できます。と表示されたらlist
完了です。それ以外の場合は、変換行を追加する必要がありますf = list(f)
。
多くの場合、これはスクリプトではなく対話的に行う方が簡単です。
>>> f = open(filename).readlines()
>>> type(f)
list
>>> f
['first line\n', 'second line\n', 'last line\n']
これを細かく分解すると、各ピースのタイプを個別に確認できます。
>>> filename = 'C:/foo.txt'
>>> type(filename)
str
>>> fileobj = open(filename)
>>> type(fileobj)
_io.TextIOWrapper
>>> lines = fileobj.readlines()
>>> type(lines)
list
これをすべて 1 行にまとめるとlines=open('C:/foo.txt').readlines()
、最終結果は 3 つのステップで行った場合と同じになります — <code>lines はlist
.
しかし、何を試せばよいかわからないために、実験しても何かがわからない場合はどうでしょうか。
さて、対話型インタープリターにはヘルプが組み込まれています。
>>> fileobj = open(filename)
>>> help(fileobject.readlines)
Help on built-in function readlines:
readlines(...)
Return a list of lines from the stream.
hint can be specified to control the number of lines read: no more
lines will be read if the total size (in bytes/characters) of all
lines so far exceeds hint.
を返すとすぐそこに書かれていますlist
。
または、ドキュメントを参照してください。3.x のどこにあるのかを推測しようとするreadlines
のは、実際には少し複雑です。なぜなら、open
返されるもののタイプが明らかではないからです…しかし、左側の「クイック検索」を使用するだけで、 が見つかりますio.ioBase.readlines
。同じ答え:
readlines(hint=-1)
ストリームから行のリストを読み取って返します。読み取られる行数を制御するために、ヒントを指定できます。これまでのすべての行の合計サイズ (バイト/文字単位) がヒントを超える場合、それ以上の行は読み取られません。