ami*_*tas 11 python line-endings
我正在寻找一种方法来确保在读取,编辑和编写时在python程序中维护文件的行尾样式.
Python具有通用文件结束支持,可以将所有行结尾转换\n为文件读取时,然后在写入文件时将它们全部转换为系统默认值.在我的情况下,我想仍然进行初始转换,但然后使用原始EOL样式而不是系统默认值编写文件.
有没有标准的方法来做这种事情?如果没有,是否有一种标准方法来检测文件的EOL样式?
假设没有标准的方法可以做到这一点,可能的工作流程将是:
将所有行结尾转换为\n.
做文件的东西.
将所有行结尾转换为原始样式.
在这个工作流程中,执行第2步的最佳方法是什么?
sen*_*rle 11
使用python的通用换行支持:
f = open('randomthing.py', 'rU')
fdata = f.read()
newlines = f.newlines
print repr(newlines)
Run Code Online (Sandbox Code Playgroud)
newlines 如果文件使用混合分隔符,则包含文件的分隔符或分隔符元组.
小智 5
要保留原始行尾,请使用newline=''未翻译的读或写行尾。
with open('test.txt','r',newline='') as rf:
content = rf.read()
content = content.replace('old text','new text')
with open('testnew.txt','w',newline='') as wf:
wf.write(content)
Run Code Online (Sandbox Code Playgroud)
请注意,如果文本操作本身处理行尾,则可能需要其他或替代逻辑来检测和匹配原始行尾。
该'U'模式也可以使用,但已弃用。
newline控制通用换行模式的工作方式(仅适用于文本模式)。它可以是
None,'','\n','\r',和'\r\n'。其工作方式如下:•从流中读取输入时,如果换行符为None,则启用通用换行符模式。输入中的行可以以
'\n','\r'或结束'\r\n',并且'\n'在返回给调用方之前将其转换为行。如果为'',则启用通用换行模式,但是行结尾不翻译就返回给呼叫者。如果它具有任何其他合法值,则输入行仅由给定的字符串终止,并且该行的末尾未经转换返回给调用方。•将输出写入流时,如果newline为
None,则'\n'写入的所有字符都会转换为系统默认的行分隔符os.linesep。如果换行符是''或'\n',则不会进行翻译。如果换行符是其他任何合法值,'\n'则将写入的所有字符转换为给定的字符串。
| 归档时间: |
|
| 查看次数: |
3467 次 |
| 最近记录: |