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 – 圣诞老人巧克力”
>“6007458 SCA – Morrisons香蕉”

请注意,“6008157 CPP – 圣诞老人巧克力”最后有一个空格.这是上面脚本的列表:

>“测试:6008386 HH – Walkers Crisps”
>“测试:6EB​​A72~1”
>“测试:6007458 SCA – Morrisons香蕉”

如何在递归远程目录时避免这种情况?如果仅由’os.listdir()’正确返回,我可以修复文件夹名称.

关于如何解决这个问题的任何想法?

最佳答案 当CIFS上的文件名包含在Windows文件名中非法的字符时,Windows使用生成的8.3“占位符”.

在这种情况下,它正在发生,因为你的“圣诞老人巧克力”文件名以空格结束. Windows文件名不能以空格结尾,因此它使用占位符来使文件可访问.

我不认为你可以使用GetLongPathName – 没有长的文件名要映射到,因为根据定义,这将是一个非法的文件名.如果你有这样的文件名,我认为没有办法找出它在服务器上的实际内容,并且它会对你有用,因为你不能通过那个文件名来引用它.

点赞