私はPythonを初めて新しくするわけではありませんが、何か "Pythonic"(とその逆)を作るのを理解するのは難しいです。なぜPythonでlen(file)を使用しないのですか?
これは愚かな質問だと私を許しますが、なぜlen(ファイル)を実行してファイルのサイズを取得できないのですか?
ファイル。 __len__
は実装されていないため、別のものに必要なようではありませんか?ファイルサイズを返すように実装されていれば、何らかの理由で混乱したり矛盾したりするのでしょうか?
私はPythonを初めて新しくするわけではありませんが、何か "Pythonic"(とその逆)を作るのを理解するのは難しいです。なぜPythonでlen(file)を使用しないのですか?
これは愚かな質問だと私を許しますが、なぜlen(ファイル)を実行してファイルのサイズを取得できないのですか?
ファイル。 __len__
は実装されていないため、別のものに必要なようではありませんか?ファイルサイズを返すように実装されていれば、何らかの理由で混乱したり矛盾したりするのでしょうか?
ファイルはイテレータです。あなたは、ファイル内バイトの数をしたい場合は、ファイル全体
sum(1 for line in file)
を読む必要が行数を確認するには、os.stat
例えば
import os
os.stat(filename).st_size
OK、イテレーターのことは意味があります。ファイルをメモリに読み込み、バッファ上でlen()を実行する必要があるファイルに対して '__len__'を実装すると思います。おそらくいい考えではないでしょう。したがって、OSに問い合わせることができます。これはすでにファイルサイズを知っています。従ってos.statです。ありがとう! –
Iを使用長さを見つけることは、OS固有の機能に依存するので、言うでしょう。あなたは、このコードでファイルの長さを見つけることができます:あなたはまた、文字列にファイル全体を読み込み、文字列の長さを見つけることができる
import os os.path.getsize('C:\\file.txt')
。しかし、ファイルがすべてのあなたの記憶を食べる巨大なサイズではないことを確かめたいと思うでしょう。
file
はイテレータを返しますので、len()
は使用できません。
あなたがos.stat
を使用することができ、ファイルのサイズを取得するには、次の
>>> foo = os.stat("abc")
>>> foo.st_size
193L
あなたが行の数を意味するサイズであれば、これらを試してみてください。
len(open("abc").readlines())
または
sum (1 for _ in open("abc"))
ファイルはイテレータですが、多くの方法があります。 – delnan
'len(open(" abc ")。readlines())'はとてもエレガントです。ありがとうございます。 – PhysicalChemist
Python 3の学習者にとって、「193L」は「193行」を意味するものではなく、「193は大数」という意味です。 – Noumenon
ファイルには、より広い定義があります。特にあなたが考えるかもしれないよりも、Unixでは。たとえば、プリンターの長さは?またはCDROMドライブ?どちらも/ devにあるファイルとWindowsで並べ替えられています。
私たちが通常ファイルと考えるものについては、その長さはどのくらいでしょうか?変数のサイズは?バイト単位のファイルのサイズ?後者はもっと理にかなっていますが、それはより奇妙になります。ファイルの内容のサイズ、またはディスク上のサイズ(モジュラスアロケーションユニットサイズ)を表示する必要があります。疎なファイル(空き領域がなく、通常はNTFSやXFSなどのファイルシステムでサポートされているファイルのサイズの一部であるファイル)については、もう一度問題が発生します。
もちろん、これらすべての回答は、「1つを選択して、あなたが選んだものを文書化する」ことができます。おそらくそれはまさに実行すべきものですが、Pythonicであるためには、多くのドキュメントを読まなくても何かをクリアする必要があります。 len(string)
はほとんど明らかです(バイトまたは文字が戻り値であるかどうか尋ねるかもしれません)。len(array)
が明らかです。len(file)
で十分ではないかもしれません。
これは愚かな質問だと私に許してもらえますが、なぜlen(ファイル)を使ってファイルのサイズを にすることができませんか?何かで、任意のファイルディスクリプタのためのサイズ 『
チャールズ・バーンズ...
LIKEあなたは常に取得するos.fstat()
を使用することができますが、その答えは、Unixのの『すべてのファイルがある』哲学についての良い点を作る、と』それは意味のあるまたは有用な何も返さないことがあり
import os
f = open(anything)
size = os.fstat(f.fileno()).st_size
... ...
>>> os.fstat(sys.stdout.fileno()).st_size
0
>>> fd1, fd2 = os.pipe()
>>> os.fstat(fd1).st_size
0
私は理由はPythonのファイルオブジェクト、またはファイルのようなオブジェクトは、ストリームを表現することになっているということだと思います、そしてストリームはドン特に本物の場合は、sys.stdout
のような長さがあります。
通常、あなた唯一のものは、Pythonのファイルオブジェクトに関する保証は、それは、少なくともread()
の1またはwrite()
をサポートすることであることができ、そしてそれはそれについてです。文字の数を測定する
簡単な方法は次のようになります
file = open('file.bin', 'r')
# Seek to the end. (0 bytes relative to the end)
file.seek(0, 2)
length = file.tell()
(1)Pythonでインタラクティブインタプリタは 'インポートthis'を実行します。 (2)それを実装するためには、ファイルを読み終える必要があります。だから、OSにあなたのためにそれをするように頼むほうがいいでしょう(例えば、[このような質問](0120)) – J0HN
誰かが来たからですos.statとstatinfo.st_sizeを使ってください。 – varun