写入文件后,为什么os.path.getsize仍然返回以前的大小?

2024-05-15 01:45:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图将一个大的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))

运行此命令将0作为文件大小打印大约80次迭代,然后打印4176次。Python是否在实际输出输出输出之前将输出存储在缓冲区中?


Tags: 文件方法importsizeosline阈值xml
3条回答

是否尝试将os.path.getsize替换为os.tell,如下所示:

f2.write(line)
size = f2.tell()

文件大小与文件位置不同。例如

os.path.getsize('sample.txt') 

它准确地返回以字节为单位的文件大小。

但是

f = open('sample.txt')
print f.readline()
f.tell() 

这里f.tell()返回文件处理程序的当前位置,即下一次写入将把数据放在哪里。因为它知道缓冲,所以只要简单地追加到输出文件,它就应该是准确的。

是的,Python正在缓冲您的输出。你最好自己跟踪尺寸,比如:

size = 0
for line in f1:
  if str(line) == '</Service>\n':
    break
  else:
    f2.write(line)
    size += len(line)
    print('size = ' + str(size))

(这可能不是100%准确的,例如在Windows上,由于\r\n行分隔符,每行将获得一个字节,但对于简单的分块来说应该足够了。)

相关问题 更多 >

    热门问题