有沒有辦法找到當前打開的文件對象的大小?打開的文件對象的大小
具體來說,我正在與tarfile模塊創建tarfiles,但我不希望我的tarfile超過一定的大小。據我所知,tarfile對象是類文件對象,所以我想一個通用的解決方案將工作。
有沒有辦法找到當前打開的文件對象的大小?打開的文件對象的大小
具體來說,我正在與tarfile模塊創建tarfiles,但我不希望我的tarfile超過一定的大小。據我所知,tarfile對象是類文件對象,所以我想一個通用的解決方案將工作。
$ ls -la chardet-1.0.1.tgz
-rwxr-xr-x 1 vinko vinko 179218 2008-10-20 17:49 chardet-1.0.1.tgz
$ python
Python 2.5.1 (r251:54863, Jul 31 2008, 22:53:39)
[GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> f = open('chardet-1.0.1.tgz','rb')
>>> f.seek(0,2)
>>> f.tell()
179218L
添加ChrisJY的想法的例子
>>> import os
>>> os.fstat(f.fileno()).st_size
179218L
>>>
如果您有文件描述符,可以使用fstat
找出大小(如果有的話)。更通用的解決方案是尋找文件的結尾,並在那裏讀取它的位置。
那麼,如果該文件對象支持tell方法,你可以這樣做:
current_size = f.tell()
,將告訴你它是目前寫作。如果以順序方式寫入,這將是文件的大小。
否則,您可以使用其他人建議的文件系統功能,即os.fstat
。
另一種解決方案是使用StringIO「如果您正在執行內存中操作」。
with open(file_path, 'rb') as x:
body = StringIO()
body.write(x.read())
body.seek(0, 0)
現在body
表現如同像body.read()
各種屬性的文件對象。
body.len
給出文件大小。
http://docs.python.org/library/stat.html#stat.ST_SIZE`os.fstat`返回`stat`結構,請使用`st_size` – shevski 2011-10-11 10:00:55
有人可以闡明`f .seek(0,2)`?爲什麼`tell()`沒有它返回0? – 2015-08-31 11:45:04