IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python open函数newline=‘‘参数理解 -> 正文阅读

[Python知识库]Python open函数newline=‘‘参数理解

Python open函数newline=’'参数理解

1、背景

Python open()函数里面的newline参数不怎么理解,查阅了蛮多资料,最终我看到了简书上的这篇文章。

文章链接:https://www.jianshu.com/p/0b0337df165a

光看也看不明白,于是我便进行了如下实验。

2、实验

2.1、写文件、读文件都带上newline=’’

# 调用csv模块。
import csv

# 以只写模式打开文件test01.csv文件,若文件不存在,则新建;文件存在,则覆盖。
with open('test01.csv','w',newline='') as file:
    # writer()函数返回一个 writer 对象,该对象负责将用户的数据在给定的文件类对象上转换为带分隔符的字符串。
    writer=csv.writer(file)
    # csv writer.writerow(row)将row 形参写入到 writer 的文件对象。
    writer.writerow('a')
    writer.writerow('b')

# 以只读的方式打开test01.csv文件。
with open('test01.csv','r',newline='') as file:
    # read()方法用于从文件读取指定的字节数,如果未给定或为负则读取所有。
    content=file.read()
    # 打印内容。
    print(content)

运行结果:
image-20210818143852363
添加断点,启动调试,可以看到变量content的值为’a\r\nb\r\n’。
image-20210818143945303

2.2、写文件带上参数newline=’’,读文件不带参数

# 调用csv模块。
import csv

# 以只写模式打开文件test02.csv文件,若文件不存在,则新建;文件存在,则覆盖。
with open('test02.csv','w',newline='') as file:
    # writer()函数返回一个 writer 对象,该对象负责将用户的数据在给定的文件类对象上转换为带分隔符的字符串。
    writer=csv.writer(file)
    # csv writer.writerow(row)将row 形参写入到 writer 的文件对象。
    writer.writerow('a')
    writer.writerow('b')

# 以只读的方式打开test02.csv文件。
with open('test02.csv','r') as file:
    # read()方法用于从文件读取指定的字节数,如果未给定或为负则读取所有。
    content=file.read()
    # 打印内容。
    print(content)

运行结果:
image-20210818144349039
添加断点,启动调试,可以看到变量content的值为’a\nb\n’。
image-20210818144516067

2.3、写文件不带参数,读文件带参数newline=’’

# 调用csv模块。
import csv

# 以只写模式打开文件test03.csv文件,若文件不存在,则新建;文件存在,则覆盖。
with open('test03.csv','w') as file:
    # writer()函数返回一个 writer 对象,该对象负责将用户的数据在给定的文件类对象上转换为带分隔符的字符串。
    writer=csv.writer(file)
    # csv writer.writerow(row)将row 形参写入到 writer 的文件对象。
    writer.writerow('a')
    writer.writerow('b')

# 以只读的方式打开test03.csv文件。
with open('test03.csv','r',newline='') as file:
    # read()方法用于从文件读取指定的字节数,如果未给定或为负则读取所有。
    content=file.read()
    # 打印内容。
    print(content)

运行结果:
image-20210818144649650
添加断点,启动调试,可以看到变量content的值为’a\r\r\nb\r\r\n’。
image-20210818144805342

2.4、写文件、读文件都不带参数newline=’’

# 调用csv模块。
import csv

# 以只写模式打开文件test04.csv文件,若文件不存在,则新建;文件存在,则覆盖。
with open('test04.csv','w') as file:
    # writer()函数返回一个 writer 对象,该对象负责将用户的数据在给定的文件类对象上转换为带分隔符的字符串。
    writer=csv.writer(file)
    # csv writer.writerow(row)将row 形参写入到 writer 的文件对象。
    writer.writerow('a')
    writer.writerow('b')

# 以只读的方式打开test04.csv文件。
with open('test04.csv','r') as file:
    # read()方法用于从文件读取指定的字节数,如果未给定或为负则读取所有。
    content=file.read()
    # 打印内容。
    print(content)

运行结果:
image-20210818144945759
添加断点,启动调试,可以看到变量content的值为’a\n\nb\n\n’。
image-20210818145051878

3、说明

下面4张图片选自Python官方文档。

图一:
image-20210818150140441

图二:
image-20210818150157079
图三:
image-20210818161635102
图四:
image-20210818161711327

序号说明结果
实验一写文件、读文件都带上newline=’’a\r\nb\r\n
实验二写文件带上参数newline=’’,读文件不带参数a\nb\n
实验三写文件不带参数,读文件带参数newline=’’a\r\r\nb\r\r\n
实验四写文件、读文件都不带参数newline=’’a\n\nb\n\n

由图三、图四可知:

  • 如果写文件时,未指定newline参数,则将’\n’转换为系统默认行分隔符,又由图二可知,Windows系统默认的行分隔符为’\r\n’。即写文件时,未指定newline参数,则’\n’会转换为’\r\n’。【注:第二部分实验的操作系统为Windows】
  • 如果读文件时,未指定newline参数,则’\r’、’\r\n’都会转换为’\n’。
  • 写文件、读文件时,指定了newline=’’,不会发生转换。

由实验一的结果可推断出:

  • csv模块中的writerow()方法在写文件时会加入’\r\n’作为换行符。【写文件、读文件都指定了newline=’’,不会发生转换,因此可以推断出writerow()方法会在写文件时加入’\r\n’作为换行符。】
实验一:
csv模块中的writerow()方法在写文件时会加入'\r\n'作为换行符。
写文件的时候,指定newline='',因此写入文件的数据不会发生替换,即写入文件的数据为'a\r\nb\r\n';
与此同时,读文件的时候,指定了newline='',因此读出的数据不会发生转换。因此结果为'a\r\nb\r\n'。

实验二:
csv模块中的writerow()方法在写文件时会加入'\r\n'作为换行符。
写文件的时候,指定newline='',因此写入文件的数据不会发生替换,即写入文件的数据为'a\r\nb\r\n';
读文件的时候,未指定newline='',因此'\r'、'\r\n'都会转换为'\n',
即文件中的'\r\n'会被替换'\n'放入缓冲区。因此结果为'a\nb\n'。

实验三:
csv模块中的writerow()方法在写文件时会加入'\r\n'作为换行符。
写文件的时候,未指定newline='',此时'\n'会转换为'\r\n',
即写入文件的数据由'a\r\nb\r\n'转为'a\r\r\nb\r\r\n'。
读文件的时候,指定了newline='',因此读出的数据不会发生转换。因此结果为'a\r\r\nb\r\r\n'。

实验四:
csv模块中的writerow()方法在写文件时会加入'\r\n'作为换行符。
写文件的时候,未指定newline='',此时'\n'会转换为'\r\n',
即写入文件的数据由'a\r\nb\r\n'转为'a\r\r\nb\r\r\n'。
读文件的时候,未指定newline='','\r'、'\r\n'都会转换为'\n',
因此'a\r\r\nb\r\r\n'中的尾部'\r\n'被替换成'\n';第一个'\r'替换为'\n',因此结果为'a\n\nb\n\n'。

4、参考资料

CSV 文件读写

open()函数

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-19 12:01:31  更:2021-08-19 12:03:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 12:48:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计