Python脚本os.listdir未列出目录中c.gcom文件的排查求助
嘿,我来帮你梳理下这个问题的排查方向,结合你的代码和现象来看,大概率是文件名或者字符串处理的细节出了问题:
先排查文件名的特殊性:你说c的位置是空白,说明循环确实遍历到了这个文件,但处理后变成了空字符串。建议先在循环里打印原始文件名的「原始表示」,比如加一行
print(repr(file))——这样能显示出隐藏的不可见字符(比如换行符、制表符、前后空格)。举个例子,如果c的文件名实际是'c.gcom\n'(末尾带换行),用string.strip(file, '.gcom')处理后,会把.gcom和换行符都去掉,最后就剩下空字符串,输出自然是空白。检查
string.strip的用法坑:你现在用的string.strip(file, '.gcom')其实是把字符串两端所有属于.gcom这个字符集合的字符都删掉,而不是精准去掉后缀。比如如果文件名是'cc.gcom',strip之后会变成'';如果文件名是'c.gcommm',strip后会错误地把末尾多余的m也去掉。这逻辑和你想要的「去掉后缀」完全不一样,更可靠的做法是用os.path.splitext(file)[0],它会精准拆分文件名和后缀,比如'a.gcom'拆分后得到'a',完全不会有strip的意外问题。验证中间变量z的真实值:在
print(z)之前加一行print(repr(z)),看看z到底是空字符串,还是有不可见字符。如果是'',那说明strip把所有字符都删掉了;如果是'\t'或者'\n',那就是文件名带了这些隐藏字符。
给你个更健壮的代码版本,替换掉strip的写法:
import os def getCommands(): for file in os.listdir(com_dir): if file.endswith(com_ext): z = os.path.splitext(file)[0] print(z)
内容的提问来源于stack exchange,提问作者NaruS

