我想创建一个包含许多“页面”的文本文件,并将每个页面的字节偏移记录在一个单独的文件中.为此,我将字符串打印到主输出文件并使用bytes_written = file.write(str)计算字节数.但是,字节偏移通常是错误的.

我切换到bytes_written = os.write(fd,bytes(str,’UTF-8′)),现在可以正常工作了. write()和os.write()有什么区别?或者归因于我将字符串手动转换为UTF-8而导致返回值的差异?

解决方法:

What is the difference between write() and os.write()?

后者是操作系统级别system call的薄包装器,而前者是标准C库的一部分,后者执行一些额外的缓冲,最终在实际需要将其缓冲数据写入file descriptor时调用后者.

Python 3.x为文件对象的write()方法添加了一些额外的逻辑,该方法为Python str对象进行自动字符编码转换,而Python 2.x则没有.

Or is the difference in the return value simply due to my manual conversion of the string to UTF-8?

在Python 3.x中,差异与打开文件的方式更相关.

如果您以二进制模式打开文件,例如f = open(filename,’wb’)然后f.write()需要一个bytes对象,并返回写入的字节数.

相反,如果您以文本模式打开文件,例如f = open(filename,’w’)然后f.write()需要一个str对象,并返回写入的字符数,对于多字节编码(如UTF-8)可能与写入的字节数不匹配.

请注意,无论在调用os.open()时是否使用了O_BINARY标志,os.write()方法总是需要一个bytes对象.

标签:python,file,python-3-x,utf-8

来源: https://codeday.me/bug/20190608/1199865.html

python os write_Python 3:写入方法与os.write返回的字节数相关推荐

  1. Python 文件打开读取写入方法

    目录 前言 open()方法 with open()方法 实用案例 前言 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写 ...

  2. python serial.write_Python serial.write方法代码示例

    本文整理汇总了Python中serial.write方法的典型用法代码示例.如果您正苦于以下问题:Python serial.write方法的具体用法?Python serial.write怎么用?P ...

  3. python 重命名的方法_Python下OS模块重命名方法renames

    在python中有很多强大的模块,其中我们经常要使用的就是OS模块,OS模块提供了超过200个方法来供我们使用,并且这些方法都是和数据处理相关的,这里介绍下重命名这个方法. OS的重命名方法是os.r ...

  4. MAC OS获取root权限方法

    MAC OS获取root权限方法 MAC OS原来可以通过很多方法获取root权限,本空间上一篇文章即是一种方法,在继续查阅中又发现: 管理员用户用命令 sudo -i sudo -s sudo su ...

  5. python获取文件字节数_python关于文件操作中的字符个数和字节数

    记得刚开始学习python文件操作写文件的时候有个问题,很奇怪.最后知道了就是字节数的原因. 我们先来看个例子. 新建个文件存为utf-8命名为0117utf-8.txt记得去掉BOM头. 我们用r+ ...

  6. python os write_Python os.write() 方法

    Python os.write() 方法 概述 os.write() 方法用于写入字符串到文件描述符 fd 中. 返回实际写入的字符串长度. 在Unix中有效. 语法 write()方法语法格式如下: ...

  7. python的open方法_Python os.open() 方法

    Python os.open() 方法 概述 os.open() 方法用于打开一个文件,并且设置需要的打开选项,模式参数mode参数是可选的,默认为 0777. 语法 open()方法语法格式如下: ...

  8. Python | 重命名现有文件(os.rename()方法的示例)

    重命名现有文件 (Renaming an existing file) To change the name of an existing file – we use "rename()&q ...

  9. python中tmp是什么函数_Python os.tmpfile()方法

    Python os.tmpfile()方法 概述 os.tmpfile() 方法用于返回一个打开的模式为(w+b)的临时文件对象,这文件对象没有文件夹入口,没有文件描述符,将会自动删除. 语法 tmp ...

最新文章

  1. service层加需要加锁吗_Redis分布式锁,你真的用对了吗?
  2. python面试-Python面试题总结
  3. PHP中empty,is_null,isset中的异同和功能
  4. 算法导论 练习10.4-5二叉树的遍历
  5. 学会这些 Python 美图技巧,就等着女朋友夸你吧!| 原力计划
  6. js顺序加载与并行加载
  7. mysql客户端导出数据_mysql客户端导出数据表的方法
  8. ISO常见的17大体系介绍
  9. 姿态传感器的原理与应用文献笔记
  10. 计算机进管理提示找不到入口,如何解决Win10提示找不到入口点dllregisterserver
  11. Type-C接口技术(一)
  12. 小程序input绑定输入保存数据
  13. firefox被hao.360劫持的处理方法
  14. ASIC开发流程介绍
  15. 论文Robust Range Estimation with a Monocular Camera for Vision-Based FCW System解读
  16. ffmpeg 生成单色测试视频
  17. Kali与编程:Winserver 2019 搭建web服务器7-05
  18. 黑苹果gtx1050显卡驱动问题
  19. 使用phpstorm将本地代码实时自动同步到远程服务器
  20. 个推和极光推送技术介绍

热门文章

  1. python安装的模块在pycharm中能用吗_pycharm安装python模块
  2. php框架进入命令行,swoole为何要用命令行来启动_PHP开发框架教程
  3. 在JSP中使用JavaBean
  4. php安装mongo扩展,php安装mongo扩展和mongodb扩展
  5. Ssm框架实现的学生信息管理系统
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的旅游景点酒店预订网站设计
  7. 535 Login Fail. Please enter your authorization code to login. More information in http://service.ma
  8. oracle重启 日志_超详细的数据库主机及数据库日志收集总结
  9. 小米笔试题:无序数组中最小的k个数
  10. 常见性能问题:慢sql导致响应时间长分析定位