我试图将一个大的xml文件拆分成更小的块.我写入输出文件然后检查它的大小,看它是否通过了一个阈值,但我不认为getsize()方法按预期工作.
什么是获取大小变化的文件的文件大小的好方法.
我做过这样的事......
import string
import os
f1 = open('VSERVICE.xml', 'r')
f2 = open('split.xml', 'w')
for line in f1:
if str(line) == '</Service>\n':
break
else:
f2.write(line)
size = os.path.getsize('split.xml')
print('size = ' + str(size))
Run Code Online (Sandbox Code Playgroud)
运行此命令将打印0作为文件大小进行约80次迭代,然后打印4176.在实际输出之前,Python是否将输出存储在缓冲区中?
Sri*_*ram 11
文件大小与文件位置不同.例如,
os.path.getsize('sample.txt')
Run Code Online (Sandbox Code Playgroud)
它以字节为单位返回文件大小.
但
f = open('sample.txt')
print f.readline()
f.tell()
Run Code Online (Sandbox Code Playgroud)
这里f.tell()返回文件处理程序的当前位置 - 即下一次写入将放置其数据的位置.因为它知道缓冲,所以只要你只是附加到输出文件就应该是准确的.
Ric*_*dle 10
是的,Python正在缓冲你的输出.你最好自己跟踪尺寸,如下所示:
size = 0
for line in f1:
if str(line) == '</Service>\n':
break
else:
f2.write(line)
size += len(line)
print('size = ' + str(size))
Run Code Online (Sandbox Code Playgroud)
(这可能不是100%准确,例如在Windows上,由于\r\n行分隔符,每行会获得一个字节,但它应该足够简单的分块.)
您是否尝试将os.path.getsize替换为os.tell,如下所示:
f2.write(line)
size = f2.tell()
Run Code Online (Sandbox Code Playgroud)