有一个文件,我想确保不增长大于2 GB(因为它必须运行在使用ext 2的系统上)。考虑到我将在两次检查之间写入这个文件,检查文件大小的好方法是什么?特别是,我是否需要担心尚未写入磁盘的缓冲,未刷新的更改?如何确定Python中打开文件的大小?
回答
你可以开始是这样的:如果你不写文件
>>> f = TrackedFile('palindrome.txt', 'w')
>>> f.size
0
>>> f.write('A man a plan a canal ')
>>> f.size
21
>>> f.write('Panama')
27
显然,这不工作:
class TrackedFile(file):
def __init__(self, filename, mode):
self.size = 0
super(TrackedFile, self).__init__(filename, mode)
def write(self, s):
self.size += len(s)
super(TrackedFile, self).write(s)
然后,你可以使用它像这样从头开始,但你可以调整你的方法来处理初始数据。您可能还需要重写一些其他方法:例如,writelines
。
无论编码如何,它都可以工作,因为字符串只是字节序列。
>>> f2 = TrackedFile('palindrome-latin1.txt', 'w')
>>> f2.write(u'A man a plan a canál '.encode('latin1')
>>> f3 = TrackedFile('palindrome-utf8.txt', 'w')
>>> f3.write(u'A man a plan a canál '.encode('utf-8'))
>>> f2.size
21
>>> f3.size
22
也许不是你想要的,但我会建议它。
import os
a = os.path.getsize("C:/TestFolder/Input/1.avi")
另外一个打开的文件,你可以使用fstat功能,它可以在一个打开的文件中。它需要一个整数的文件句柄,不是一个文件对象,所以你必须使用的fileno方法的文件对象:
a = open("C:/TestFolder/Input/1.avi")
b = os.fstat(a.fileno()).st_size
最可靠的是创建一个包装类,当你打开它会检查文件的大小,跟踪写入和查找操作,根据这些操作计算当前大小并防止超出大小限制。
或者,如果文件已经打开:
>>> fsock = open('/etc/hosts', 'rb').read()
>>> len(fsock)
444
这是该文件的字节数是。
os.fstat(file_obj.fileno()).st_size
应该做的伎俩。我认为它会返回写入的字节。如果你担心缓冲,你总是可以在手边冲水。
也可以在追加模式下工作!谢谢。是的,我会在打电话之前冲洗。 – 2017-10-06 22:07:43
我不熟悉python,但是没有流对象(或打开文件时得到的任何东西)有一个包含流的当前位置的属性?
与您使用C函数ftell()或.NET中的Stream.Position类似。
显然,只有当您位于流的末尾时,才能正常工作。
这种方法的好处是您不必关闭文件或担心未刷新的数据。
'filehandle.tell()'确实显示打开的文件中的字节数,并且可以在写或附加模式下工作。不知道为什么所有这些更复杂的答案都得到了提升。 – hurfdurf 2015-07-30 17:17:14
@hurfdurf不,'f.tell()'似乎在追加模式下不能可靠地工作。除非你第一个'f.seek(0,2)'。我不知道为什么。 – 2017-10-06 21:51:49
虽然这是一个老问题,但我认为Isak有最简单的解决方案。以下是如何做到这一点在Python:
# Assuming f is an open file
>>> pos = f.tell() # Save the current position
>>> f.seek(0, 2) # Seek to the end of the file
>>> length = f.tell() # The current position is the length
>>> f.seek(pos) # Return to the saved position
>>> print length
1024
- 1. 如何打开在屏幕中间以特定大小打开的文件夹
- 2. 如何在Python中确定'word'大小
- 3. Python可以打开的文件的最大大小?
- 4. Python:如何获得PyQt5中选定文件的文件大小?
- 5. 打开的文件对象的大小
- 6. Bash确定文件大小
- 7. Javascript - 确定文件大小
- 8. 确定文件夹大小
- 9. 使用C++文件流(fstream),如何确定文件的大小?
- 10. 如何在python中打开.MSG文件
- 11. 如何在Python中打开Excel文件?
- 12. 如何在python中打开文件?
- 13. 如何在python中打开ANS文件?
- 14. 如何确定Windows中是否打开特定文件?
- 15. 如何在Python中正确处理记录器文件大小?
- 16. 在python中将给定的较大文件缩小到特定文件大小
- 17. 如何打开最接近指定文件的文件python
- 18. 在VB.NET中确定文件大小
- 19. 确定mod_wsgi中python数据的大小
- 20. 如何确定JavaScript中的文件大小?
- 21. 如何确定Julia中人类可读的文件大小?
- 22. 如何使用Hive确定HDFS中的文件大小
- 23. Silverlight 4.0:如何确定MemoryStream中对象的文件大小
- 24. 如何在Windows中生成确定大小的文件?
- 25. 如何从打开的连接中确定SQLite文件名?
- 26. 无法在IE 11中打开大文件大小的PDF 11
- 27. 如何查找文件末尾以确定文件大小?
- 28. 如何在Python中打开chm文件的特定部分?
- 29. PHP,确定远程文件的大小
- 30. 确定图像文件大小的PHP
是否有一个原因,你不能只是跟踪文件的大小自己的 - 那就是,看大小是什么,当你打开它,增加当你写一个计数器?不是特别优雅,但它应该工作。 – 2009-12-08 14:39:23
我想这可能是我没有想到的......我也可以尝试。 – 2009-12-08 14:40:49
虽然这不是低效的吗? – 2009-12-08 14:51:44