【求助】os.listdir(path)偶遇返回list与实际不一样的情况

风言风语... 2019-07-05 12:00:26
使用pycharm tkinter做一个类似于everything的小程序。当全盘扫描到D盘时,os.listdir返回的list与实际目录不一致;但是当单独扫描D盘时,返回的结果是一致的。求大神帮忙解决,感激不尽!!!

我做了个demo测试程序如下:
一、当全盘扫描时
def get_disklist(self):
disk_list = []

if (self.path):
disk_list.append(self.path)
else:
for c in string.ascii_uppercase:
disk = c + ':'
if os.path.isdir(disk):
disk_list.append(disk)

print("The current disk is : %s." % disk_list)

return disk_list

def search_file(self, search_key):
disk_list = self.get_disklist()
allFileList = []
cFlag = 0
dFlag = 0
eFlag = 0
fFlag = 0
for disk in disk_list:

if (disk.lower()[0] == 'c' and cFlag == 0):
cFlag = 1
files = os.listdir(disk)
print("path = %s, name = %s" % (disk, files))
if (disk.lower()[0] == 'd' and dFlag == 0):
dFlag = 1
files = os.listdir(disk)
print("path = %s, name = %s" % (disk, files))
if (disk.lower()[0] == 'e' and eFlag == 0):
eFlag = 1
files = os.listdir(disk)
print("path = %s, name = %s" % (disk, files))
if (disk.lower()[0] == 'f' and fFlag == 0):
fFlag = 1
files = os.listdir(disk)
print("path = %s, name = %s" % (disk, files))
输出结果如下:
path = C:, name = ['$Recycle.Bin', '$SysReset', 'config.ini', 'defaults', 'Documents and Settings', 'HG', 'hiberfil.sys', 'Intel', 'KDubaSoftDownloads', 'LenovoDrivers', 'pagefile.sys', 'pefdata.dat', 'PerfLogs', 'Program Files', 'Program Files (x86)', 'ProgramData', 'Recovery', 'swapfile.sys', 'System Volume Information', 'Users', 'Windows']



path = D:, name = ['.idea', 'ImitateEverything.py', 'venv', '__pycache__']


path = E:, name = ['$RECYCLE.BIN', 'BaiduNetdiskDownload', 'Codes', 'DHC_Repository', 'LotterytTicket', 'QT', 'QTCodes', 'QTSelf', 'System Volume Information', '任务分配列表', '你妹', '简历', '视频']

path = F:, name = ['$RECYCLE.BIN', '85Codes', 'A9 网络环境.docx', 'BaiduNetdiskDownload', 'Codes', 'GitChatCodes', 'msgdispose.log', 'RtcServer.log', 'System Volume Information', '总结', '杂项', '网址以及路径.txt', '资料']

只有D盘执行os.listdir(path)的时候不正确,其他盘都是正确的。

二、当只扫描D盘时,执行一种同样的代码,输出结果却是正确的,输出结果如下;
path = D:/, name = ['$RECYCLE.BIN', 'linshi.txt', 'mydatabase.db', 'Program Files (x86)', 'Program_Develop', 'Program_System', 'PythonProject', 'PythonTest', 'QT', 'Software', 'System Volume Information', 'Video_2019-05-07_173602.wmv', '软件']
...全文
431 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
一笑程序猴 2019-07-05
  • 打赏
  • 举报
回复
引用 3 楼 byadom_IT 的回复:
多谢大佬,我试了一下。确实是获取盘符的时候D:/后边少了'/'。加上后好了,我思考了一下,只有D盘出现错误的原因应该是我的python工程创建在D盘,不加‘/’读取的是工程底下的目录,而不是D盘底下的所有目录。

问题已解决,多谢了!!!


没错,就是这个原因。
风言风语... 2019-07-05
  • 打赏
  • 举报
回复
引用 1 楼 一笑程序猴 的回复:
应该是你传入的path有问题,对比一下,全盘扫描时传的是“D:”而单独扫描时传入的是“D:/” 单独扫描把斜杠去掉或者全盘扫描时加上斜杠试试看。
多谢大佬,我试了一下。确实是获取盘符的时候D:/后边少了'/'。加上后好了,我思考了一下,只有D盘出现错误的原因应该是我的python工程创建在D盘,不加‘/’读取的是工程底下的目录,而不是D盘底下的所有目录。 问题已解决,多谢了!!!
一笑程序猴 2019-07-05
  • 打赏
  • 举报
回复
试了下,有斜杠和没斜杠扫描出的结果差异还是挺大的。
一笑程序猴 2019-07-05
  • 打赏
  • 举报
回复
应该是你传入的path有问题,对比一下,全盘扫描时传的是“D:”而单独扫描时传入的是“D:/”

单独扫描把斜杠去掉或者全盘扫描时加上斜杠试试看。

37,741

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧