【问题标题】:List files with Unicode names in python 2.7 on windows在 windows 上的 python 2.7 中列出具有 Unicode 名称的文件
【发布时间】:2023-04-05 12:31:01
【问题描述】:

我是 python 新手。我正在使用它来批处理一些在文件名和内容中都带有 Unicode 字符的文本文件。我已经在开头声明了编码。我能够处理 Unicode 内容,但是当我尝试在 Windows 上列出文件时,这就是我得到的。

26-??????-P.txt

文件的实际名称是

26-देहजरी-P.txt

这是我正在使用的脚本

# -*- coding: utf-8 -*-
import re
from os import listdir

allfiles = [f for f in listdir('./')]
    for f in allfiles:
        if f.endswith('.txt'):
            print f;

我想有选择地打开和处理文本文件并输出与输入文件名称相似的新文件(以便以后可以匹配)。

请指导如何实现这一点。提前致谢。

【问题讨论】:

  • 只需...使用 Python 3:它具有内置的 Unicode 支持并且这是该语言的未来,因此您将获得所有新功能,而 Python 2 的开发即将暂停。
  • 感谢@ForceBru 的建议。
  • 如果您能够打开和处理文件,这看起来更像是一个装饰性显示问题
  • 您的意思是非 ASCII 名称?因为像 a-z 0-9 这样的所有字母也是 Unicode
  • @tripleee,这些“?”字符是 ANSI API 中最佳匹配转换的常见结果。在某些特定情况下,可能存在实际的最佳拟合映射,例如“∞”->“8”,但通常最终使用默认的“?”特点。天城文没有代码页;我认为印度的系统使用西欧代码页 1252 作为系统 ANSI 代码页,在这种情况下,我希望所有问号。如果它是正确的 ANSI 并由控制台使用其旧代码页(默认为 OEM)解码,那么我希望 mojibake 而不是问号。

标签: python windows python-2.7 unicode


【解决方案1】:

一种方法是在路径上设置 Unicode。

例如:

import os
for i in os.listdir(u"C:\\Your\\Path\\Folder"):   #I have used 'u' before the path
    print i 

输出:

26-देहजरी-P.txt

【讨论】:

  • Python 2 不正确支持原始 unicode 文字,因此必须像此答案中那样将反斜杠加倍。您可以在操作系统函数中使用正斜杠,或者如果需要反斜杠(例如某些 shell 命令),则可以使用正斜杠加上 os.path.normpath
猜你喜欢
  • 1970-01-01
  • 2018-03-22
  • 2019-09-30
  • 2012-03-13
  • 2016-02-24
  • 2013-09-01
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多