在python中读/写txt文件后文件大小发生了变化

时间:2018-03-14 09:27:49

标签: python filesize read-write

执行以下代码以使用Python生成文本文件的副本后,newfile.txtoldfile.txt的文件大小不完全相同。

with open('oldfile.txt','r') as a, open('newfile.txt','w') as b:
    content = a.read()
    b.write(content)

虽然oldfile.txt有例如667 KB,newfile.txt有681 KB。

有没有人对此有解释?

2 个答案:

答案 0 :(得分:1)

有各种原因。

您正在将文件作为文本文件打开,因此文件的字节被解释(解码)为python,而不是编码。所以可能会有变化。

来自open文档(https://docs.python.org/3/library/functions.html#open):

  

从流中读取输入时,如果换行为“无”,则启用通用换行模式。输入中的行可以以'\ n','\ r'或'\ r \ n'结尾,并且在返回给调用者之前将这些行转换为'\ n'。

因此,如果原始文件是ASCII(例如在Windows中生成),则会删除\r。但是当写回文件时,您不能再拥有原始\r(如果您使用的是Linux或MacO),或者您将始终\r\n,如果您使用的是Windows(似乎是这样,因为你的文件大小增加了。)

此外,编码可能会更改文字。例如。 BOM标记可能被移除(或添加),并且可能(但AFAIK没有隐式完成),可以删除不需要的代码(您可以在Unicode中使用一些额外的代码,这会改变附近代码的行为。可以添加更多其中一个,但只有最后一个是有效的。

答案 1 :(得分:0)

我试过Linux / Ubuntu。它按预期工作,两个文件的文件大小完全相同。

此时,我猜这种行为与python无关,可能取决于你的文件系统(压缩)或操作系统。