python怎么读取txtpython中换⾏符怎么写_Python读写⽂件之换⾏符系统的换⾏符和路径分隔符
os模块可以获取当前系统的换⾏符和路径分隔符
windows操作系统
>>> os.linesep
'\r\n'
>>> os.sep
'\\'
linux操作系统
>>> import os
>>> os.linesep #换⾏符
'\n'
>>> os.sep #路径分隔符
'/'
open函数的newline参数
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
读取⽂件
newline = None(默认)
不指定newline,则默认开启Universal newline mode,所有\n, \r, or \r\n被默认转换为\n ;newline = ''
不做任何转换操作,读取到什么就是什么newline = 'the other legal values'
按照给定的换⾏符界定⾏
简单⽽⾔,读取⽂件时,newline参数默认,不管换⾏符是什么,都会被转换为\n
写⼊⽂件
newline = None(默认)
\n字符会被转换为各系统默认的换⾏符(os.linesep)
windows的换⾏符是\r\n,但是写⼊时,\r\n也会转换,转换为\r\r\nnewline = '' 或者newline = '\n'
不做任何操作newline = 'the other legal values'
\n字符会被转换为给定的值
简单⽽⾔,使⽤字符串的rstrip()⽅法,去掉末尾的各种换⾏符
然后,加上\n,
写⽂件时,newline参数默认,\n字符会被转换为各系统默认的换⾏符(os.linesep)
⽰例1:编辑软件换⾏写,python原样读取和转换读取
向中写⼊如下内容:
withopen('','r',newline='') asf:
print(ad()))
withopen('','r') asf:
print(ad()))
'line1\r\nline2'
'line1\nline2'
结果符合预期
写⼊时
向txt写⼊时,回车插⼊\r\n
读取时
newline='',不做转换,原样输出'line1\r\nline2'
newline = None,转换\r\n为\n
⽰例2:python转换写\n,python原样读取和转换读取
withopen('','w') asf:
f.write('line1\nline2')
withopen('','r',newline='') asf:
print(ad()))
withopen('','r') asf:
print(ad()))
'line1\r\nline2'
'line1\nline2'
这个结果符合预期
写⼊时
newline = None,\n字符会被转换为各系统默认的换⾏符,会将\n转换为\r\n 读取时
newline='',不会转换\r\n,原样输出
newline = None,会将\r\n转换为\n
⽰例3:python原样写\n,python原样读取和转换读取
withopen('','w',newline='') asf:
f.write('line1\nline2')
withopen('','r',newline='') asf:
print(ad()))
withopen('','r') asf:
print(ad()))
'line1\nline2'
'line1\nline2'
结果符合预期
写⼊时
newline='',不会转换,原样写⼊'line1\nline2'
读取时
newline='',不会转换,原样输出'line1\nline2'
newline = None,会转换\r\n为\n,但是没有\r\n,所以显⽰的\n,也没问题
去掉字符串⾸尾的空⽩字符
\n,\r,\t,空格等
字符串的strip(),lstrip(),rstrip()
str.strip去掉字符串头和尾的空⽩字符
>>> help(str.strip)
Help on method_descriptor:
strip(...)
S.strip([chars]) -> str
Return a copy of the string S with leading and trailing whitespace removed. If chars is given and not None, remove characters in chars instead.
str.lstrip 去掉字符串头的空⽩字符
>>> help(str.lstrip)
Help on method_descriptor:
lstrip(...)
S.lstrip([chars]) -> str
Return a copy of the string S with leading whitespace removed.
If chars is given and not None, remove characters in chars instead.
str.rstrip去掉字符串尾的空⽩字符
>>> help(str.rstrip)
Help on method_descriptor:
rstrip(...)
S.rstrip([chars]) -> str
Return a copy of the string S with trailing whitespace removed.
If chars is given and not None, remove characters in chars instead.
拓展:linux和windows⽂件之间的拷贝
假设有⼀个linux下的⽂件, 那么, 它在⽂件中的换⾏标志是:\n, 现在把拷贝到Windows上, Windows不到中的\r\n, 所以,对于Windows⽽⾔, 压根就没有发现有任何换⾏, 所以, 我们从Windows上看到的⽂件显⽰在⼀⾏⾥⾯。win10的txt⽂件中\n也能识别为换
⾏符了
同理, 假设Windows上有⼀个⽂件, 那么, 它在⽂件中的换⾏标志是\r\n, 现在拷贝到linux下, linux遇到⽂件中的\n, 认为是换⾏, ⾄于其他的, 认为是正常的字符。 如此⼀来, \r就被当成了⽂件的正常部分,当这个⽂件是可执⾏脚本时,就会报错。
win7中只有\r\n被识别为换⾏符
>>> with open('','w',newline='') as f:
f.write('line1\rline2\nline3\r\nline4')
24
>>> with open('','r',newline='') as f:
'line1\rline2\nline3\r\nline4'
win10中,\r,\n,\r\n都可以识别为换⾏
>>> b'\r'.hex()
'0d'
>>> b'\n'.hex()
'0a'
以上\r⼗六进制是0d,\n⼗六进制是0a
⽰例1:\r
withopen('','w',newline='') asf:
f.write('line1\rline2')
withopen('','r',newline='') asf:
print(ad()))
withopen('','r') asf:
print(ad()))
'line1\rline2'
'line1\nline2'
\r能换⾏
⽰例2:\n
withopen('','w',newline='') asf:
f.write('line1\nline2')
withopen('','r',newline='') asf:
print(ad()))
withopen('','r') asf:
print(ad()))
'line1\nline2'
'line1\nline2'
\n能换⾏
⽰例3:\r\n
withopen('','w',newline='') asf:
f.write('line1\r\nline2')
withopen('','r',newline='') asf:
print(ad()))
withopen('','r') asf:
print(ad()))
'line1\r\nline2'
'line1\nline2'
⽰例4:\r\r\n
withopen('','w',newline='') asf:
f.write('line1\r\r\nline2')
withopen('','r',newline='') asf:
print(ad()))
withopen('','r') asf:
print(ad()))
'line1\r\r\nline2'
'line1\n\nline2'
\r和\r\n都被识别为换⾏符
⽰例5:\r,newline=None
\n字符会被转换为各系统默认的换⾏符(os.linesep)这⾥没有\n
withopen('','w') asf:
f.write('line1\rline2')
withopen('','r',newline='') asf:
print(ad()))
withopen('','r') asf:
print(ad()))

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。