有没有一种方法可以使用Python列出目录中的文件(而不是目录)?我知道我可以使用os.listdir
和一个os.path.isfile()
循环,但如果有更简单的方法(比如一个名为os.path.listfilesindir
的函数),那就更好了。
有没有一种方法可以使用Python列出目录中的文件(而不是目录)?我知道我可以使用os.listdir
和一个os.path.isfile()
循环,但如果有更简单的方法(比如一个名为os.path.listfilesindir
的函数),那就更好了。
下面是一个简单的生成器表达式:
files = (file for file in os.listdir(path)
if os.path.isfile(os.path.join(path, file)))
for file in files: # You could shorten this to one line, but it runs on a bit.
...
如果你觉得更适合的话,你也可以创建一个生成器函数:
def files(path):
for file in os.listdir(path):
if os.path.isfile(os.path.join(path, file)):
yield file
for file in files(path):
...
files = list(filter(lambda x: os.path.isfile(x), os.listdir(path)))
- Ganesh Kathiresanfiles = next(os.walk('..'))[2]
files = glob.glob(join(in_path, "**/*"), recursive=True)
files = [f for f in files if os.path.isfile(f)]
在Windows中使用pathlib的方法如下:
files = (x for x in Path("your_path").iterdir() if x.is_file())
会出现以下错误:
TypeError: 'WindowsPath' object is not iterable
你应该使用Path.iterdir()。
filePath = Path("your_path")
if filePath.is_dir():
files = list(x for x in filePath.iterdir() if x.is_file())
对于在当前目录中操作文件的特殊情况,您可以使用简单的一行列表推导式来完成:
[f for f in os.listdir(os.curdir) if os.path.isfile(f)]
dirpath = '~/path_to_dir_of_interest'
files = [f for f in os.listdir(dirpath) if os.path.isfile(os.path.join(dirpath, f))]
from pathlib import Path
。 - tshepangpathlib
很好用,但我认为它取决于脚本的实际情况 - 如果只是偶尔处理文件,完全依赖pathlib
可能有些大材小用。 - Gareth Lattypathlib
,列出仅文件的最短方式是:[x for x in Path("your_path").iterdir() if x.is_file()]
is_dir()
方法:from pathlib import *
#p is directory path
#files is list of files in the form of path type
files=[x for x in p.iterdir() if x.is_file()]
.iterdir()
会跳过空文件。
我找到的解决方案是:
from pathlib import *
#p is directory path
#listing all directory's content, even empty files
contents=list(p.glob("*"))
#if element in contents isn't a folder, it's a file
#is_dir() even works for empty folders...!
files=[x for x in contents if not x.is_dir()]