Python中如何获取TemporaryFile的大小?是否有更优方法?
更好的临时文件大小获取方法
嘿,这确实是个常见的小痛点!你现在用的seek(0)+read()取长度的方法虽然能工作,但不仅繁琐,而且如果文件内容很大的话,把整个文件读进内存还会造成不必要的性能开销。这里有几个更优雅高效的实现方式:
1. 直接跟踪写入字节数或用tell()获取位置
每次调用write()方法时,它都会返回实际写入的字节数,你可以直接累加这个值来实时跟踪文件大小;另外,写入完成后,文件指针会停在文件末尾,此时调用tell()就能直接得到文件的总字节数——完全不需要移动指针或者读取内容。
import tempfile a = tempfile.TemporaryFile() total_size = 0 # 分多次写入并累加大小 total_size += a.write(b"hello ") total_size += a.write(b"world!") print(total_size) # 输出:12 # 或者直接用tell()获取当前指针位置(即文件总大小) print(a.tell()) # 同样输出:12
这个方法最轻便,不需要引入额外模块,也没有任何内存开销,是首选方案。
2. 用os.fstat()获取文件元信息
如果没办法跟踪写入过程(比如文件是由其他函数写入的),可以通过文件描述符获取文件的系统状态信息,其中就包含文件大小。这种方法不需要移动文件指针,也不会读取文件内容,效率很高。
import tempfile import os a = tempfile.TemporaryFile() a.write(b"some test content") # 通过文件描述符获取文件状态,提取大小 file_stat = os.fstat(a.fileno()) print(file_stat.st_size) # 输出对应字节数
3. (可选)用NamedTemporaryFile配合os.path.getsize()
如果你能接受使用NamedTemporaryFile而非TemporaryFile,也可以通过文件路径来获取大小,但需要注意手动管理文件删除(因为默认情况下NamedTemporaryFile关闭后会自动删除文件):
import tempfile import os # 设置delete=False避免文件自动删除 with tempfile.NamedTemporaryFile(delete=False) as temp_file: temp_file.write(b"another test string") # 通过文件路径获取大小 file_size = os.path.getsize(temp_file.name) print(file_size) # 手动删除临时文件 os.unlink(temp_file.name)
这个方法相对繁琐,一般只在需要通过文件路径操作临时文件的场景下使用。
总的来说,优先选择第一种或第二种方法,它们都比你当前的实现更高效、更优雅。
内容的提问来源于stack exchange,提问作者Dr.Knowitall
相关产品推荐
相关产品推荐

