我遇到的问题应该很简单 - 从给定目录路径中的文件创建列表。我怀疑这个问题与相对路径有关,但仍然无法让它正常工作。这是一个起点:
import sys, os.path
dir = os.path.abspath(sys.argv[1])
print(f'Given directory path: {dir}')
filelist = []
[filelist.append(os.path.abspath(item)) for item in os.listdir(dir)
if os.path.isfile(item) if not item.startswith('.')]
for file in filelist:
print(file)
这个问题与os.listdir和相对路径有关,而我的笨拙列表理解不必要地增加了组合的复杂性。修复评论中建议的列表理解使得将它们放在一起变得更加清晰和容易,并且它现在可以正常工作。下面的工作代码:
filelist = [os.path.join(os.path.abspath(dir),file)
for file in os.listdir(dir)
if os.path.isfile(os.path.join(dir,file))
if not file.startswith('.')]
更新2:从我的自我强加的列表理解监狱中解脱出来,我意识到也可以使用next和os.walk:
filelist = [os.path.join(dir,file)
for file in next(os.walk(dir))[2]
if not file.startswith('.')]
答案 0 :(得分:0)
我认为glob会排除隐藏文件。这应该为您提供所提供路径的文件列表。
from os.path import abspath, isfile, join
from glob import glob
files = [abspath(x) for x in glob(join(sys.argv[1], '*')) if isfile(x)]
答案 1 :(得分:0)
问题是os.path.abspath(item),其中item在dir中,必须假定该项在当前工作目录中,因为os.listdir只返回相对于dir参数的对象。而是使用 os.path.abspath(os.path.join(dir,item))或者只是os.path.join(dir,item)