我有以下文件:
$ 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'
除了获取源以使用不同名称保存文件外,是否有任何方法可以通过 linux 中的命令行或使用 Python 来“修复”文件名?
最佳答案
在 shell 上时,您的终端将尝试将字节字符串转换为可打印的字符。有可能某些字节根本不是有效字符,因此复制粘贴它们是无用的。
在 shell 上处理不可打印的文件名最简单的方法是使用获取文件的 inode ,然后使用 find
对其进行处理。
获取文件的 inode :
ls -il
第一列是 inode 。传递这个来查找:
find . -inum <inode-number> -exec mv {} newfilename.msg \;
在 Python 中,打开一个具有奇怪名称的文件的诀窍是做一个文件列表并将结果字符串传递给 open
。
例如:
os.listdir('/var/tmp/attachment/')
关于python - 如何读取/访问具有非 ascii 字符的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23435084/