python2打开文件_关于python:何时以二进制模式打开文件(b)?

我注意到在文档中他们总是用'wb'打开一个CSV文件。 为什么'b'? 我知道b代表二进制模式,但是你什么时候使用二进制模式(我猜想CSV文件不是二进制模式)。 如果相关我是从arcpy.da.SearchCursor()查询的结果写入CSV

编辑:根据这个答案注意到wb+用于编写二进制文件。 什么包括+呢?

如果有任何非ascii字符你应该使用二进制模式...在二进制模式下打开将永远不会改变或损害你的数据afaik,但有时打开ascii模式将删除或更改字符...因此我总是打开 二进制模式(即使使用ascii数据)

@JoranBeasley:没有"ascii模式"这样的东西。 改为使用术语"文本模式"(文本文件的字符编码可以是任何东西)。

阅读您已链接的问题的答案 - +表示您希望同时写入和从文件中读取。

使用'b'模式,按原样读取/写入二进制数据,无需进行任何转换,例如将换行符转换为特定于平台的值或使用字符编码对文本进行解码/编码。

csv模块很特别。 csv数据是文本,因此可以预期文本模式,但csv模块默认使用'

'来终止所有平台上的行,并且它始终将'

'和'

'都识别为换行符。 如果您在文本模式下打开相应的文件(使用通用换行符),那么您将在Windows上获得'

'(损坏的换行符)(os.linesep == '

')。 这就是Python 2文档说你必须使用二进制模式的原因。 在Python 3中,使用了文本模式,但是您应该传递newline=''以禁用通用换行模式。

如果要保留字段中嵌入的可能换行符(例如'

'),您还需要禁用通用换行符。

要挑剔,传递newline=不会禁用通用换行模式。从文档:"如果是,启用通用换行模式,但行结尾返回给调用者未翻译。"

文件打开默认是使用文本模式,它可以在写入时将" n"字符转换为特定于平台的表示,并在读取时返回。

在Windows中,这将修改从' n'到' r n'的换行符,这将在其他应用程序/平台中打开CSV文件时出现问题。

因此,在打开二进制文件时,您应该将'b'附加到模式值以在二进制模式下打开文件,这将提高可移植性。在没有这种区别的系统上,添加"b"无效。

注意:'w +'截断文件。

模式'r +','w +'和'a +'打开文件进行更新(读写)。

详情如下:https://docs.python.org/2/library/functions.html#open

什么是"截断"文件,是否意味着替换?

相反。文本模式提高了代码的可移植性(您可以读取在其他平台上编写的文本,本地编写的文件可以通过特定于平台的程序(如notepad.exe)来理解)。 csv是一种特殊情况,其中二进制模式用于文本数据

截断表示如果文件不存在则会创建该文件,如果文件存在则会被覆盖。所以是的,简单来说就意味着取代。

我同意,"文本模式增加了可移植性,而csv只是一种特殊情况,其中二进制模式用于文本数据"。

特别是对于Python csv模块,答案很简单:它是文档所要求的。

If csvfile is a file object, it must be opened with the ‘b’ flag on platforms where that makes a difference.

资料来源:https://docs.python.org/2.7/library/csv.html#csv.reader

由于在文本模式下打开文件会根据操作系统对核心代码的处理方式进行不同的处理,因此CVS例程作者必须确定他们需要更多控制 - 他们更愿意自己处理换行。这可能使他们能够解决在另一个操作系统上创建的一个操作系统下处理文件时遇到的不一致问题 - 在某些特殊情况下,"文本读取"会改变问题。它也可能没有发现错误,但他们希望避免未来的可能性。或者,也可能是因为他们不得不处理换行注意事项,绕过文本处理可能会更快。

从逻辑上讲,由于无法控制正在读取的文件的OS源,因此使用二进制文件可能是更好的方法。但是,编写一个文本文件可能会很好地将其留给核心例程来使用文本模式处理当前操作系统的换行符。

在python文件模式"w +"的困惑中讨论了"+"

我从来没有收到过关于为什么我不能在二进制模式下打开ascii文件的好解释。

我从未见过以二进制模式打开文件来破坏数据。

我已经看到以ascii模式打开文件,改变或损坏正在检索的数据,我和我认为大多数经验丰富的python程序员都会以二进制模式打开文件,除非我们有某种保证,没有,也永远不会文件中的二进制字符。

要理解原因,请写open(binary.txt, wb).write(b"1

2

3

")和open(text.txt, w).write("1

2

3

")并尝试在notepad.exe中打开这两个文件

因为notepad.exe太笨了以至于无法识别 n作为换行符,当它没有前面时 r n对我来说不是一个很好的理由...如果我写" n"我希望该文件只包含 n。 ..

通过在非Posix环境(如MSDOS和MS Windows)上使用t,

序列在输入时转换为(在输出上转换为相反的)。 b(二进制模式)不执行此类转换。

据推测,CSV库处理回车(可能在遇到它们时忽略它们)。

编辑:刚刚注意到一个改变的问题。

由于.CSV文件并非真正供人类读者使用,因此库只能使用(换行(LF)又名换行)分隔符输出它们。他们唯一真正的缺点是MSWindows用户用记事本打开文件:它会显示不佳。 CSV库还可以输出带有

(CR LF)的文件,因为大多数程序都符合MSDOS文本文件约定。

无论哪种方式,库都可以通过b(二进制)模式编写。如果在t(文本)模式下打开,行分隔符可能会像

那样略微奇怪。可能大多数CSV文件解析器忽略CR,并将LF LF识别为结束一行并跟随一条空(空白)行,它也会忽略。

手册页中解释了+:

w+ Open for reading and writing. The file is created if it does

not exist, otherwise it is truncated. The stream is

positioned at the beginning of the file.

区别在于w+允许读写,而w只允许写入。

可能通过使用它们作为行分隔符()...但是很好的答案

是否在文本模式下翻译取决于平台(os.linesep)。它在Windows上。它不适用于OS X.您不需要显式使用t模式(它在Python 2上传递给stdio函数,因此它可以启用与平台相关的行为,例如将Ctrl + Z识别为输入上的EOF字符)。 csv模块始终在输入时识别 r和 n

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 命令之 dmidecode -- 显示机器的DMI信息

文章目录命令介绍常用选项(一)Valid string keywords are(二)Valid type keywords are(三)type全部编码列表命令示例示例1,-d 后面跟任何东西,输出内容都相同,奇葩&#…

java 接口 私有_Java 9:好的,坏的和私有的接口方法

java 接口 私有Java 9 是在几周前发布的。 查看发行说明 ,其中包含许多有趣的功能。 不过,我觉得并非一切都是不如Oracle和Java行家似乎图片吧 。 我看到了Java世界中的三个趋势,分别是好,坏和丑陋。 让我们从好的开始。 Birdman…

java群面自我介绍,腾讯群面,自我介绍很重要

我面试时间是十一点,但是一直等到十二点多才开始,去了以后先要填一张表,贴照片,内容差不多就是我们自己简历上的,然后再群面的时候交给面试官。我们那个小组是六个人,在一个房间里,面试官先让我…

python卸载module_Python学习笔记

拖了一整年终于开始学习Python编程。为了逼自己快速上路,强行要求自己本学期的两门课程全部的coding作业用Python完成。 一门机器学习(computational Stats),一门Jeff WU 大佬的实验设计与分析(DOE)。即使R…

Linux 命令之 uname -- 显示系统/主机的相关信息

文章目录一、命令介绍二、常用选项三、命令示例(一)显示系统主机名、内核版本号、CPU类型等信息一、命令介绍 uname 命令的英文全称即“Unix name”。用于显示系统相关信息,比如主机名、内核版本号、硬件架构等。如果未指定任何选项&#xf…

json api_JSON模式在构建和部署API中的作用

json api什么是JSON模式 ? 它提供了一种描述任何JSON值的结构和属性的彻底方法。 在记录对任何JSON API的请求和响应时,它非常有用。 本文将探讨其在API的软件开发周期中的作用。 记录JSON响应格式 定义数据架构的最明显的用例也许是在记录API响应的结构…

java 中允许键重复的,二叉搜索树的定义是否允许重复键?

许多算法将指定排除重复项 . 例如&#xff0c;MIT算法书中的示例算法通常提供没有重复的示例 . 实现重复(在节点上或在一个特定方向上作为列表)是相当简单的 . )大多数(我见过)将左边的孩子指定为<&#xff0c;将右边的孩子指定为> . 实际上&#xff0c;允许右子节点或左…

mlp神经网络_白天鹅黑天鹅灰天鹅?卷积神经网络帮你搞定识别

全文共3014字&#xff0c;预计学习时长6分钟本文将通过一系列的天鹅图片来解释卷积神经网络&#xff08;CNN&#xff09;的概念&#xff0c;并使用CNN在常规多层感知器神经网络上处理图像。图像分析假设我们要创建一个能够识别图像中的天鹅的神经网络模型。天鹅具有某些特征&am…

Linux 关机/关闭主机/关闭系统/重启系统/注销系统的命令

文章目录一、shutdown二、reboot三、init四、halt五、poweroff六、logout七、systemctl八、Alt PrtSc (SysRq) REISUB九、molly-guard&#xff08;一&#xff09;molly-gurar 是什么&#xff1f;&#xff08;二&#xff09;如何安装 molly guard?一、shutdown 该命令用于断…

java登录界面命令_Java命令行界面(第26部分):CmdOption

java登录界面命令由于Tweet&#xff0c;我了解了本系列中第26个基于Java的功能强大的库&#xff0c;该库用于解析命令行参数 。 CmdOption在其GitHub主页上被描述为“一个通过注释配置的&#xff0c;用于Java 5应用程序的简单注释驱动命令行解析器工具包。” 该项目的副标题是“…

matlab如何添加度,matlab里的模糊工具箱绘制隶属度函数曲线导入到word的方法

在fuzzy logic toolbox里有 fuzzy membershipfunction可以编辑隶属度函数&#xff0c;非常方便&#xff0c;但是我们写论文一般要把相应的曲线导入到word里&#xff0c;怎样将隶属度函数曲线导入到word里呢&#xff1f;本人也苦苦的寻找了好久。。。方法如下&#xff1a;先看看…

pythonista3使用说明_Pythonista中文文档:sound

sound — 音效和音乐播放 sound模块包含在iOS上播放音效和音频文件的功能。 它还可以使用Recorder类从麦克风录制音频文件。 注意: 为了使用Recorder类&#xff0c;你必须允许访问麦克风。首次使用Recorder.record()方法时&#xff0c;系统会自动显示一个对话框。如果你未授权访…

Linux 命令之 hostnamectl -- 查看/修改当前主机的信息

文章目录命令介绍常用选项命令示例&#xff08;一&#xff09;查看当前主机的信息&#xff08;二&#xff09;设置当前主机的名称命令介绍 hostnamectl 可用于查询和更改系统主机名和相关设置。此工具区分三种不同的主机名&#xff1a; 高级“漂亮”主机名&#xff0c;其中可…

getopt java_Java命令行界面(第28部分):getopt4j

getopt javagetopt4j的页面将其描述为“一个根据GNU样式解析命令行参数的库。” 然后&#xff0c; 页面介绍getopt4j &#xff1a;“getopt4j库旨在以与glibc &#xff08;GNU C运行时库&#xff09;中的C getopt&#xff08;&#xff09;函数相同的方式解析命令行选项。 与原始…

matlab 返回变量类型的命令,MATLAB主要命令汇总

MATLAB主要命令汇总1、常用信息help:在线帮助(显示在命令窗)。helpwin:在线帮助(独立窗口显示)。ver:MATLAB及工具箱的版本信息。2、管理工作区命令who:显示当前变量。whos:显示当前变量具体信息。clear:从内存中清楚变量和函数。quit:退出MATLAB。3、管理命令和函数what:显示当…

springboot redis token_Spring Boot + Redis + 注解 + 拦截器来实现接口幂等性校验

优质文章&#xff0c;及时送达作者 | wangzaiplus链接 | www.jianshu.com/p/6189275403ed一、概念幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次比如:订单接口, 不能多次创建订单支付接口, 重复支付同一笔订单只能扣一次钱支付宝回调接口, 可能…

语言代号/地区代号/国家代号

国家/地区语言代码简体中文(中国)zh-cn繁体中文(台湾地区)zh-tw繁体中文(香港)zh-hk英语(香港)en-hk英语(美国)en-us英语(英国)en-gb英语(全球)en-ww英语(加拿大)en-ca英语(澳大利亚)en-au英语(爱尔兰)en-ie英语(芬兰)en-fi芬兰语(芬兰)fi-fi英语(丹麦)en-dk丹麦语(丹麦)da-dk英…

java 示例_功能Java示例 第2部分–讲故事

java 示例这是称为“ Functional Java by Example”的系列文章的第2部分。 我在本系列的每个部分中开发的示例是某种“提要处理程序”&#xff0c;用于处理文档。 在上一部分中&#xff0c;我从一些原始代码开始&#xff0c;并应用了一些重构来描述“什么”而不是“如何”。 …

python如何读取文件内容求和_使用python对文件中的数值进行累加的实例

问题描述&#xff1a; 一个文件由若干条记录组成&#xff0c;记录的格式为&#xff1a;“num1 num2”&#xff0c;有时候&#xff0c;需要统计文件中num1对应的num2的总值。 处理问题的思路 用传说中的python来处理&#xff0c;很方便。几行代码就可以了。 处理思路&#xff1a…

基2FFT算法matlab程序编写,频率抽取(DIF)基2FFT算法的MATLAB实现

频率抽取(DIF)基2FFT算法和时间抽取(DIT)基2FFT算法是两种等价的FFT算法&#xff0c;其相同之处&#xff1a;(1)DIF与DIT两种算法均为原位运算。(2)DIF与DIT运算量相同。不同之处&#xff1a;(1)DIF的算法结构是将DIT算法结构倒过来。 DIF为输入顺序&#xff0c;输出乱序。运算…