执行以下代码以使用Python生成文本文件的副本后,newfile.txt
与oldfile.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。
有没有人对此有解释?
答案 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无关,可能取决于你的文件系统(压缩)或操作系统。