Python - 有没有办法解决'os.listdir()'因文件夹名错误返回乱码的问题?
我有一个用Python写的简单脚本:
import os
def Path(SourcePath):
for Folder in os.listdir(SourcePath):
print "TESTING: %s" % Folder
Path("\\\\192.168.0.36\\PDFs")
当我运行这个脚本时,它会在局域网的一个远程共享文件夹中递归查找,并简单地显示找到的文件夹名称。这个共享主要包含文件夹。
问题是,如果一个文件夹的名字后面有空格,这个脚本就会显示一些乱码。
比如说,如果我在这个共享文件夹里有以下几个文件夹:
- "6008386 HH - Walkers Crisps"
- "6008157 CPP - Santas Chocolate "
- "6007458 SCA - Morrisons Bananas"
注意到"6008157 CPP - Santas Chocolate "这个名字后面有一个空格。运行上面的脚本后,得到的列表是:
- "TESTING: 6008386 HH - Walkers Crisps"
- "TESTING: 6EBA72~1"
- "TESTING: 6007458 SCA - Morrisons Bananas"
我该如何在递归远程目录时避免这个问题呢?如果'os.listdir()'能正确返回文件夹名称,我就可以修复这个文件夹名称。
有没有什么想法可以解决这个问题?
2 个回答
3
这不是无意义的文字,而是一个短文件名(8.3格式)。这个格式是Windows系统特有的,不过你可以使用 GetLongPathName()
这个函数来把它转换回长文件名。
4
Windows在通过CIFS访问文件时,如果文件名包含一些在Windows中不合法的字符,就会生成一种叫做8.3的“占位符”。
在这个例子中,你的文件名“Santas Chocolate ”后面有一个空格。Windows的文件名不能以空格结尾,所以它用一个占位符来让这个文件可以被访问。
我觉得你不能用GetLongPathName来处理这个问题,因为没有合法的长文件名可以对应,因为这本身就是一个不合法的文件名。如果你遇到这样的文件名,我认为你无法在服务器上找到它的真实名称,而且这对你帮助不大,因为你也无法用这个文件名来引用它。