Eri*_*got 11 python text newline utf-8 codec
在Python中,使用与平台相关的换行符写入UTF-8编码文件的最佳方法是什么?理想情况下,该解决方案在Python 2中进行大量打印的程序中非常透明地工作.(有关Python 3的信息也很受欢迎!)
事实上,写入UTF-8文件的标准方式似乎是codecs.open('name.txt','w').但是,文档表明了这一点
(...)在读写时不会自动转换'\n'.
因为该文件实际上是以二进制模式打开的.那么,如何使用适当的平台相关换行符写入UTF-8文件?
注意:"t"模式似乎实际上是在Windows XP上使用Python 2.6完成工作(codecs.open('name.txt','wt')),但这是否有记录并保证可以正常工作?
Joh*_*hin 11
假设的Python 2.7.1(这是你所引用的文件):将"重量"模式未记录(记录仅模式是"R"),并不起作用 - 编解码器模块追加"B"的模式,导致它失败的原因:
>>> f = codecs.open('bar.txt', 'wt', encoding='utf8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\python27\lib\codecs.py", line 881, in open
file = __builtin__.open(filename, mode, buffering)
ValueError: Invalid mode ('wtb')
Run Code Online (Sandbox Code Playgroud)
避免使用编解码器模块和DIY:
f = open('bar.text', 'w')
f.write(unicode_object.encode('utf8'))
Run Code Online (Sandbox Code Playgroud)
有关Python 3.x的更新:
看起来codecs.open()具有相同的缺陷(不会编写特定于平台的行终止符).但是内置的open(),它有一个encodingarg,很乐意这样做:
[Python 3.2 on Windows 7 Pro]
>>> import codecs
>>> f = codecs.open('bar.txt', 'w', encoding='utf8')
>>> f.write('line1\nline2\n')
>>> f.close()
>>> open('bar.txt', 'rb').read()
b'line1\nline2\n'
>>> f = open('bar.txt', 'w', encoding='utf8')
>>> f.write('line1\nline2\n')
12
>>> f.close()
>>> open('bar.txt', 'rb').read()
b'line1\r\nline2\r\n'
>>>
Run Code Online (Sandbox Code Playgroud)
有关Python 2.6的更新
文档说的与2.7文档相同.所不同的是,"打棍子成二进制模式",因为"WTB"并没有作为一个无效的模式检测追加"B"到2.6失败模式arg的黑客,该文件是在文本模式下打开,并出现工作如你所愿,而不是记录在案:
>>> import codecs
>>> f = codecs.open('fubar.txt', 'wt', encoding='utf8')
>>> f.write(u'\u0a0aline1\n\xffline2\n')
>>> f.close()
>>> open('fubar.txt', 'rb').read()
'\xe0\xa8\x8aline1\r\n\xc3\xbfline2\r\n' # "works"
>>> f.mode
'wtb' # oops
>>>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7444 次 |
| 最近记录: |