read/write txt 文件在 python 后文件大小发生变化

File size changes after read/write txt file in python

执行以下代码以生成带有 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。

有人对此有解释吗?

我试穿了 Linux / Ubuntu。它按预期工作,两个文件的 file-size 完全相等。

在这一点上,我猜这个行为与 python 无关,可能取决于您的文件系统(压缩)或操作系统。

有多种原因。

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

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

When reading input from the stream, if newline is None, universal newlines mode is enabled. Lines in the input can end in '\n', '\r', or '\r\n', and these are translated into '\n' before being returned to the caller.

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

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