write()
和os.write()
有什么区别?
它类似于C函数fwrite(3)
和write(2)
之间的差异。
后者是OS级system call的一个简单封装,而前者是标准C库的一部分,该库会执行一些额外的缓冲操作,最后在需要将其缓冲数据写入file descriptor。
的Python 3.x的增加了一些附加的逻辑到file
对象的write()
方法,该方法不用于Python str
对象自动字符编码的转换,而Python的2 x不。
或者仅仅是由于我手动将字符串转换为UTF-8而导致返回值的差异?
在Python 3.x中,差异与您打开文件的方式更相关。
如果以二进制模式打开文件,例如f = open(filename, 'wb')
然后f.write()
预计一个bytes
对象,并将返回字节写入的数量。
如果您以文本模式打开文件,例如, f = open(filename, 'w')
然后f.write()
需要一个str
对象,并且将返回写入的个字符的数字,这对于多字节编码(例如UTF-8)可能与写入的字节数不匹配。
注意,os.write()
方法总是需要一个bytes
对象,而不管是否将O_BINARY
标志的主叫os.open()
当使用。
来源
2016-06-28 19:33:47
Aya
如果你在Windows上,并且正在以文本模式写入文件,那么将为每一行结尾写入两个字节(cr + lf),其中原始字符串只有一行。如果在这种情况下'file.write()'不能正确地计算字节数,我会考虑这个错误,但是无论如何,通过确保文件以''wb''模式打开可以解决问题。 – kindall
有关* text *文件的其他类似观点:由'tell'返回的值不是**文件中的字节索引,也不是字符索引。这只是一个“寻求”可以用来回到那个位置的数字,但你不应该做太多的事情。 – Bakuriu