質問

「Dive Into Python 3」で「Readlines()メソッドがIteratorを返すようになったので、Xreadlines()がPython 2にあるのと同じくらい効率的になると読みました。ここを参照してください: http://diveintopython3.org/porting-code-to-python-3-with-2to3.html 。彼らがここでそれについて言及していないので、それが本当かどうかはわかりません: http://docs.python.org/release/3.0.1/whatsnew/3.0.html 。どうすればそれを確認できますか?

役に立ちましたか?

解決

このような:

Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> f = open('/junk/so/foo.txt')
>>> type(f.readlines())
<class 'list'>
>>> help(f.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.

>>>

他のヒント

ReadLinesメソッドはPython 3のIteratorを返しません。リストを返します

Help on built-in function readlines:

readlines(...)
    Return a list of lines from the stream.

チェックするには、インタラクティブセッションから電話してください - iteratorではなくリストを返します。

>>> type(f.readlines())
<class 'list'>

この場合、Pythonに飛び込むことは間違っているように見えます。


xreadlines されています Python 2.3以来非推奨 ファイルオブジェクトが独自のイテレーターになったとき。同じ効率を得る方法 xreadlines 使用する代わりに

 for line in f.xreadlines():

単純に使用する必要があります

 for line in f:

これにより、あなたが望むイテレーターが得られ、その理由を説明するのに役立ちます readlines Python 3で動作を変更する必要はありませんでした - それでも完全なリストを返すことができます。 line in f イディオムは反復的なアプローチを与え、長期にわたって報告されています xreadlines 完全に削除されました。

他の人はすでに多くのことを言っていますが、ポイントを故意に駆り立てるためだけに、通常のファイルオブジェクトは独自の反復剤です。だから持っている readlines() 返品イテレーターはばかげているでしょう。なぜなら、それはあなたがそれをオンにしたファイルを返すだけだからです。使用できます for スコットが言ったように、ファイルを反復するためにループします。また、itertools関数に直接渡すこともできます。

from itertools import islice
f = open('myfile.txt')
oddlines = islice(f, 0, None, 2)
firstfiveodd = islice(oddlines, 5)
for line in firstfiveodd:
  print(line)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top