Python:如何与 Windows 上的 unicode 文件名交互? (Python 2.7)
Python: How do I interact with unicode filenames on Windows? (Python 2.7)
我的问题:
- Start with US Windows 10 install
- Create a Japanese filename in Windows explorer
- Open the Python shell, and
os.listdir('.')
- The listed filename is full of question marks.
os.path.exists()
unsurprisingly reports file not found.
NTFS 将文件名存储为 Unicode。我确定如果我使用 win32api CreateFile()
系列函数,我会得到我的 Unicode 文件名,但是那些 API 太麻烦了(而且不可移植) .我更希望获得 utf-8 编码的文件名,或 FS 目录结构中的 Unicode 字节,但在默认模式下这似乎不会发生。
我试过 setlocale()
,但我还没有找到使我的程序运行的正确参数。我不想(也不能)在 Windows 机器上安装额外的代码页。这需要与 Windows.
的库存安装一起使用
请注意这与控制台无关。一个 repr() 表明 ?在 os.listdir('.')
列出的文件名中结束的字符是真正的问号,而不是一些显示工件。我假设它们是由 listdir()
在幕后使用的 API 添加的。
在控制台中使用 os.listdir()
显示该文件名时,您可能会收到 ?
s,但您可以毫无问题地访问该文件名,因为内部所有内容都以二进制形式存储。如果您试图复制文件名并将其直接粘贴到 python,它将被解释为纯粹的问号...
如果你想打开那个文件并执行任何操作,那么,看看这个...
files = os.listdir(".")
# Possible output:
# ["a.txt", "file.py", ..., "??.html"]
filename = files[-1] # The last file in this case
f = open(filename, 'r')
# Sample file operation
lines = f.readlines()
print(lines)
f.close()
编辑:
在 Python 2 中,您需要将当前路径作为 Unicode 传递,这可以使用以下方式完成:os.listdir(u'.')
,其中 .
表示当前路径。这将 return Unicode 文件名列表...
我的问题:
- Start with US Windows 10 install
- Create a Japanese filename in Windows explorer
- Open the Python shell, and
os.listdir('.')
- The listed filename is full of question marks.
os.path.exists()
unsurprisingly reports file not found.
NTFS 将文件名存储为 Unicode。我确定如果我使用 win32api CreateFile()
系列函数,我会得到我的 Unicode 文件名,但是那些 API 太麻烦了(而且不可移植) .我更希望获得 utf-8 编码的文件名,或 FS 目录结构中的 Unicode 字节,但在默认模式下这似乎不会发生。
我试过 setlocale()
,但我还没有找到使我的程序运行的正确参数。我不想(也不能)在 Windows 机器上安装额外的代码页。这需要与 Windows.
请注意这与控制台无关。一个 repr() 表明 ?在 os.listdir('.')
列出的文件名中结束的字符是真正的问号,而不是一些显示工件。我假设它们是由 listdir()
在幕后使用的 API 添加的。
在控制台中使用 os.listdir()
显示该文件名时,您可能会收到 ?
s,但您可以毫无问题地访问该文件名,因为内部所有内容都以二进制形式存储。如果您试图复制文件名并将其直接粘贴到 python,它将被解释为纯粹的问号...
如果你想打开那个文件并执行任何操作,那么,看看这个...
files = os.listdir(".")
# Possible output:
# ["a.txt", "file.py", ..., "??.html"]
filename = files[-1] # The last file in this case
f = open(filename, 'r')
# Sample file operation
lines = f.readlines()
print(lines)
f.close()
编辑:
在 Python 2 中,您需要将当前路径作为 Unicode 传递,这可以使用以下方式完成:os.listdir(u'.')
,其中 .
表示当前路径。这将 return Unicode 文件名列表...