我并不是Python的新手,但我仍然无法理解是什么让“Pythonic”(以及相反)变成了什么东西。为什么Python中没有len(文件)?
所以请原谅我,如果这是一个愚蠢的问题,但为什么我不能做一个LEN(文件),获取文件的大小?
文件。 __len__
甚至没有实现,所以它不像其他东西所需要的那样?如果它被实现为返回文件大小,它会因为某种原因而令人困惑/不一致吗?
我并不是Python的新手,但我仍然无法理解是什么让“Pythonic”(以及相反)变成了什么东西。为什么Python中没有len(文件)?
所以请原谅我,如果这是一个愚蠢的问题,但为什么我不能做一个LEN(文件),获取文件的大小?
文件。 __len__
甚至没有实现,所以它不像其他东西所需要的那样?如果它被实现为返回文件大小,它会因为某种原因而令人困惑/不一致吗?
文件是一个迭代器。为了找到你需要阅读整个文件
sum(1 for line in file)
,如果你想在一个文件中字节数线的数量,使用os.stat
如
import os
os.stat(filename).st_size
好吧,迭代器的东西是有道理的。我想为一个文件实现'__len__',它将不得不将文件读入内存,然后在缓冲区中执行len()。可能不是一个好主意。所以你可以询问OS,它已经知道文件的大小,因此os.stat。谢谢! –
我会说,因为找到长度取决于操作系统特定的功能。你可以找到一个文件的长度与此代码:
import os os.path.getsize('C:\\file.txt')
你也可以将整个文件读入一个字符串,找到字符串的长度。然而,你会想确保文件的大小不会消耗你所有的内存。
file
返回迭代器,所以你不能用它len()
。如果大小你的意思是线的编号,然后尝试这些
>>> foo = os.stat("abc")
>>> foo.st_size
193L
:
len(open("abc").readlines())
或
sum (1 for _ in open("abc"))
获取文件的大小,你可以使用os.stat
文件是一个迭代器,是的,但它有很多方法。 – delnan
'len(open(“abc”).readlines())'非常优雅,谢谢。 – PhysicalChemist
对于Python 3的学习者,“193L”并不意味着“193行”,它的意思是像“193是一个大数字”。 – Noumenon
文件有更广泛的定义,特别是在Unix中,你可能会想到。例如,打印机的长度是多少?还是一个CDROM驱动器?两者都是/ dev中的文件,并且在Windows中有所不同。
对于我们通常认为的文件,将其长度是什么呢?变量的大小?文件的大小以字节为单位?后者更有意义,但后来变得更加恶心。应列出文件内容的大小或磁盘上的大小(模数分配单元大小)。对于稀疏文件(具有大量空白部分的文件再次出现问题,这些空白部分不占用空间,但是属于文件正常报告大小的一部分,由NTFS和XFS等文件系统支持)。
当然,回答所有这些可能是,“随便挑一个,并记录你选什么。”也许这正是应该做的,但是为了Pythonic,通常必须清楚地理解,而不必阅读大量文档。 len(string)
大多是显而易见的(有人会问,如果字节或字符的返回值),len(array)
是显而易见的,len(file)
也许不太够。
因此,如果这是一个愚蠢的问题,请原谅我,但为什么我不能通过执行len(file)来获取文件的大小 ?
查尔斯·伯恩斯的回答让有关Unix的‘一切皆文件’的理念好点,而且,虽然你总是可以使用os.fstat()
得到‘的任何文件量大小’,喜欢的东西......
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()
或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)因为要实现你需要读取文件到最后。所以,你最好让操作系统为你做(例如像[这个问题](http://stackoverflow.com/questions/6591931/getting-file-size-in-python)) – J0HN
因为有人来与os.stat和statinfo.st_size – varun