我构建了这个小程序来模拟我想用文件比较的2个库。
代码是这样的:
import os
path = "C:\Users\\nelson\Desktop\Lib Check"
pc_path = os.path.join(path, "pc")
phone_path = os.path.join(path, "phone")
pc_lib = [filename for path, dirname, filename in os.walk(pc_path)]
print pc_lib
它返回
[['1.txt', '2.txt', '3.txt', '4.txt', '5.txt', '6.txt', '8.txt', '9.txt']]
除了结果在嵌套列表中之外,一切都很好。为什么呢?
我能阻止这种情况的唯一方法是使用
pc_lib = []
for path, dirname, filename in os.walk(pc_path):
pc_lib.extend(filename)
答案 0 :(得分:1)
filename是一个文件列表(您使用的名称不直观),因此预期结果
for root, dirs, files in os.walk('my/home/directory'):
print(files)
#['close_button.gif', 'close_button_red.gif'],
#['toolbar.js']
extend
解开参数list
并将结果元素追加到发出呼叫的list
答案 1 :(得分:1)
如果你想要一个文件名列表,我建议:
[os.path.join(path, filename)
for path, dirnames, filenames in os.walk(pc_path)
for filename in filenames]
答案 2 :(得分:0)
os.walk(path)
返回(root, dirs, files)
元组的迭代器。
其中
root
是当前目录相对于os.walk
dirs
是当前目录中所有子目录的list
files
是当前目录中所有普通文件的list
如果您想要文件系统树中所有文件的平面列表,请使用:
pc_lib = [
filename for _, _, files in os.walk(pc_path)
for filename in files
]
您可能希望保留绝对路径,以便使用:
pc_lib = [
os.path.join(root, filename)
for root, _, files in os.walk(pc_path)
for filename in files
]