我知道有几个帖子涉及到这个,但我还没有找到一个适合我的帖子。我需要通过搜索整个映射目录来创建扩展名为.mxd的文件列表。我使用了这段代码并且有效:
import os
file_list = []
for (paths, dirs, files) in os.walk(folder):
for file in files:
if file.endswith(".mxd"):
file_list.append(os.path.join(paths, file))
但是,它仅适用于C盘。我需要能够在我选择的映射驱动器上搜索这些文件。这是我正在使用的脚本,但它不起作用。我知道此驱动器的子目录中有一个mxd文件,但它没有在文件列表中报告。实际上,文件列表完全是空的,它不应该是。
import os
path = r"U:/TEST/"
filenamelist = []
for files in os.walk(path):
if file.endswith(".mxd"):
filenamelist.append(files)
是否有人在我的第二个代码块中看到任何错误,这些代码块会通过给定路径上的子目录进行迭代并报告带有.mxd扩展名的文件?
答案 0 :(得分:1)
os.walk(path)产生一个3元组,通常将其解压缩为root, dirs, files
。而不是
for files in os.walk(path):
...
使用
for root, dirs, files in os.walk(path):
for filename in files:
if filename.endswith(".mxd"):
filenamelist.append(filename)
答案 1 :(得分:1)
是否有人在我的第二个代码块中看到任何错误,这些代码块会通过给定路径上的子目录进行迭代并报告带有.mxd扩展名的文件?
是。比较和对比你的两个循环:
for (paths, dirs, files) in os.walk(folder):
for file in files:
if file.endswith(".mxd"):
file_list.append(os.path.join(paths, file))
for files in os.walk(path):
if file.endswith(".mxd"):
filenamelist.append(files)
您尝试做同样的事情,但不要使用相同的代码。
在第一个中,您循环遍历walk
,将每个元组存储在(paths, dirs, files)
中,然后循环遍历files
。
在第二个中,你循环遍历walk
,将每个元组存储在files
中,不要循环任何东西,然后只使用一个名为file
的变量来自一些早期的代码。
然后,即使该部分有效,您最终会追加files
(记住,这是三个列表的元组)而不是file
- 或者,可能更好,{{1} - 列表。
让第二个看起来像第一个。或者,更好的是,将它放在一个函数中并调用它两次,而不是复制和粘贴它。
答案 2 :(得分:0)
这是用于在除C之外的驱动器根上进行爬网的最终脚本:
import os
file_list = []
path = r'U:\\'
for (dirpath, subdirs, files) in os.walk(path):
for file in files:
if file.endswith(".mxd"):
file_list.append(os.path.join(dirpath, file))