5.14 忽略文件�编�¶

问题¶

你想使用原始文件�执行文件的I/O�作,也就是说文件�并没有�过系统默认编�去解�或编�过。

解决方案¶

默认情况下,所有的文件�都会根� sys.getfilesystemencoding() 返回的文本编��编�或解�。比如:

>>> sys.getfilesystemencoding()
'utf-8'
>>>

如果因为��原因你想忽略这�编�,�以使用一个原始字节字符串�指定一个文件���。比如:

>>> # Wrte a file using a unicode filename
>>> with open('jalape\xf1o.txt', 'w') as f:
...     f.write('Spicy!')
...
6
>>> # Directory listing (decoded)
>>> import os
>>> os.listdir('.')
['jalapeño.txt']

>>> # Directory listing (raw)
>>> os.listdir(b'.') # Note: byte string
[b'jalapen\xcc\x83o.txt']

>>> # Open file with raw filename
>>> with open(b'jalapen\xcc\x83o.txt') as f:
...     print(f.read())
...
Spicy!
>>>

正如你所�,在最�两个�作中,当你给文件相关函数如 open() 和 os.listdir() 传递字节字符串时,文件�的处�方�会�有��。

讨论¶

通常�讲,你�需�担心文件�的编�和解�,普通的文件��作应该就没问题了。 但是,有些�作系统�许用户通过�然或��方�去创建�字�符�默认编�的文件。 这些文件��能会神秘地中断那些需�处�大�文件的Python程�。

读�目录并通过原始未解�方�处�文件��以有效的��这样的问题, 尽管这样会带�一定的编程难度。

关于打���解�的文件�,请�考5.15�节。