在使用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。
有人对此有什么解释吗?
发布于 2018-03-14 01:47:24
原因是多种多样的。
您正在以文本文件的形式打开文件,因此文件的字节被解释(解码)为python,而不是编码。所以可能会有变化。
来自open
文档(https://docs.python.org/3/library/functions.html#open):
从流读取输入时,如果换行符为None,则启用通用换行符模式。输入中的行可以以'\n‘、'\r’或‘\r’结尾,这些行在返回给调用者之前被翻译成'\n‘。
因此,如果原始文件是ASCII (例如,在Windows中生成的),您将删除\r
。但是,当您写回文件时,您可以不再拥有原始的\r
(如果您在Linux或MacOs中),或者如果您在Windows上,您将始终拥有\r\n
(这似乎是事实,因为您的文件大小增加了)。
编码也可以改变文本。例如,可以删除(或添加) BOM标记,而且可能(但AFAIK不是隐式的),可以删除不需要的代码(您可以在Unicode中添加一些额外的代码,这会改变附近代码的行为。一个人可以增加其中的一个,但只有最后一个是有效的。
发布于 2018-03-14 01:36:15
我在Linux / Ubuntu上试过。正如预期的那样,两个文件的文件大小是完全相同的。
此时,我猜这种行为与python无关,可能取决于您的文件系统(压缩)或操作系统。
https://stackoverflow.com/questions/49273932
复制相似问题