Hin*_*ton 4 python file utf-8 python-3.x
我想创建一个包含许多"页面"的文本文件,并将每个页面的字节偏移记录在一个单独的文件中.为此,我将字符串打印到主输出文件并使用计数字节bytes_written += file.write(str).但是,字节偏移通常是错误的.
我切换到bytes_written += os.write(fd, bytes(str, 'UTF-8'))它现在有效.write()和之间有什么区别os.write()?或者归因于我将字符串手动转换为UTF-8而导致返回值的差异?
write()和之间有什么区别os.write()?
它类似于C函数fwrite(3)和C函数之间的差异write(2).
后者是围绕OS级系统调用的瘦包装,而前者是标准C库的一部分,后者执行一些额外的缓冲,并在实际需要将其缓冲数据写入文件描述符时最终调用后者.
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_BINARYos.open()