Python 如何读取/访问带有非ascii字符的文件名

Python 如何读取/访问带有非ascii字符的文件名,python,linux,character-encoding,Python,Linux,Character Encoding,我有以下文件: $ ls -l /var/tmp/attachment -rw-rw-r-- 1 3103 king_kong 27136 Apr 7 2014 å·æ°£ç³»çµ±åæ°´é維修.msg 当我尝试具体列出该文件时,会出现“未找到文件”错误: $ ls -l /var/tmp/attachment/å·æ°£ç³»çµ±åæ°´é維修.msg ls: /var/tmp/attachment/å·æ°£ç³»çµ±åæ°´é維修.msg: No su

我有以下文件:

$ ls -l /var/tmp/attachment
-rw-rw-r-- 1 3103 king_kong 27136 Apr  7  2014 å·æ°£ç³»çµ±åæ°´é維修.msg
当我尝试具体列出该文件时,会出现“未找到文件”错误:

$ ls -l /var/tmp/attachment/å·æ°£ç³»çµ±åæ°´é維修.msg
ls: /var/tmp/attachment/å·æ°£ç³»çµ±åæ°´é維修.msg: No such file or directory
因此,我不知道如何重命名该文件,使其具有更简单的文件名(仅限ascii字符),如“example.msg”

理想情况下,我希望用Python阅读此文件。这显然不是解决问题的方法:

>>> data = open(r'/var/tmp/attachment/å·æ°£ç³»çµ±åæ°´é維修.msg', 'rb')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
IOError: [Errno 2] No such file or directory: '/var/tmp/attachment/\xe5\xb7\xe6\xb0\xa3\xe7\xb3\xbb\xe7\xb5\xb1\xe5\xe6\xb0\xb4\xe9\xe7\xb6\xad\xe4\xbf\xae.msg'
>>data=open(r'/var/tmp/attachment/åçççççççççåçççççåççççççç
回溯(最近一次呼叫最后一次):
文件“”,第1行,是否在中?
IOError:[Errno 2]没有这样的文件或目录:'/var/tmp/attachment/\xe5\xb7\xe6\xb0\xa3\xe7\xb3\xbb\xe7\xb5\xb1\xe5\xe6\xb0\xb4\xe9\xe7\xb6\xad\xe4\xbf\xae.msg'

除了让源代码以不同的名称保存文件外,有没有办法在linux中通过命令行或使用Python“修复”文件名?

我遇到了同样的问题,请尝试

data = open(ru'/var/tmp/attachment/å·æ°£ç³»çµ±åæ°´é維修.msg', 'rb')

如果您有一个扩展名为“.msg”的文件,请重试

rename 's/.*/test.msg/' *.msg

在shell上时,终端将尝试将字节字符串转换为可打印字符。可能有些字节根本不是有效字符,所以复制粘贴它们是无用的

最简单的方法是在shell中处理不可打印的文件名,即使用获取文件的inode,然后使用
find
对其进行处理

要获取文件的索引节点,请执行以下操作:

ls -il
第一列是inode。传递此消息以查找:

find . -inum <inode-number> -exec mv {} newfilename.msg \; 

当我使用“ru”时,我得到了一个
SyntaxError:invalid syntax
,它似乎没有改变任何东西。文件没有更改。是否出现错误或什么也没有发生?请在您的
/var/tmp/attachment
目录中尝试
sudo rename's/*/example.msg/'*.msg
。它非常适合meI,不会出错。该命令运行并将我返回到下一行(提示)。该文件保持不变。也尝试过sudo。同样的结果。我最后使用os.listdir()列出了目录,然后使用shutil.copyfile()对其进行重命名。谢谢:)
os.listdir('/var/tmp/attachment/')