我使用os.listdir
并且它工作正常,但我也在列表中获得了子目录,这不是我想要的:我只需要文件。
我需要使用哪种功能?
我也看了os.walk
,这似乎是我想要的,但我不确定它是如何工作的。
答案 0 :(得分:44)
您需要过滤掉目录; os.listdir()
列出给定路径中的所有名称。您可以使用os.path.isdir()
:
basepath = '/path/to/directory'
for fname in os.listdir(basepath):
path = os.path.join(basepath, fname)
if os.path.isdir(path):
# skip directories
continue
os.walk()
做同样的工作;除非你需要递归子目录,否则你不需要在这里使用os.walk()
。
答案 1 :(得分:18)
这是一个很好的小单行,以列表理解的形式出现:
[f for f in os.listdir(your_directory) if os.path.isfile(os.path.join(your_directory, f))]
这将return
list
个指定your_directory
内的{{1}}个文件名。
答案 2 :(得分:8)
import os
directoryOfChoice = "C:\\" # Replace with a directory of choice!!!
filter(os.path.isfile, os.listdir(directoryOfChoice))
P.S: os.getcwd()返回当前目录。
答案 3 :(得分:4)
for fname in os.listdir('.'):
if os.path.isdir(fname):
pass # do your stuff here for directory
else:
pass # do your stuff here for regular file
答案 4 :(得分:2)
使用os.walk()的解决方案是:
for r, d, f in os.walk('path/to/dir'):
for files in f:
# This will list all files given in a particular directory
答案 5 :(得分:0)
即使这是一篇较旧的文章,也请允许我添加3.4中引入的pathlib库,该库提供了OOP风格的处理目录和文件的完整性。要获取目录中的所有文件,可以使用
def get_list_of_files_in_dir(directory: str, file_types: str ='*') -> list:
return [f for f in Path(directory).glob(file_types) if f.is_file()]
按照您的示例,您可以像这样使用它:
mypath = '/path/to/directory'
files = get_list_of_files_in_dir(mypath)
如果根据文件扩展名只需要一部分文件(例如“仅csv文件”),则可以使用:
files = get_list_of_files_in_dir(mypath, '*.csv')
答案 6 :(得分:0)
注意 PEP 471 DirEntry 对象属性是:is_dir(*, follow_symlinks=True)
所以...
from os import scandir
folder = '/home/myfolder/'
for entry in scandir(folder):
if entry.is_dir():
# do code or skip
continue
myfile = folder + entry.name
#do something with myfile