获取文件夹中的pdf文件列表

Xav*_*ina 3 python

我想获取文件夹中所有pdf文件的名称列表我有我的python脚本.

现在我有这个代码:

files = [f for f in os.listdir('.') if os.path.isfile(f)]
for f in files:

e = (len(files) - 1)
Run Code Online (Sandbox Code Playgroud)

问题是这段代码找到了文件夹中的所有文件(包括.py)所以我"修复"如果我的脚本是文件夹中的最后一个文件(zzzz.py),后来我减去列表的最后一个文件是我的脚本. PY.

我尝试了很多代码只能找到.pdf,但这越接近我.

vy3*_*y32 12

使用glob模块:

>>> import glob
>>> glob.glob("*.pdf")
>>> ['308301003.pdf', 'Databricks-how-to-data-import.pdf', 'emr-dg.pdf', 'gfs-sosp2003.pdf']
Run Code Online (Sandbox Code Playgroud)


Pad*_*ham 9

直接在目录上使用glob来查找所有的pdf文件:

from os import path
from glob import glob  
def find_ext(dr, ext):
    return glob(path.join(dr,"*.{}".format(ext)))
Run Code Online (Sandbox Code Playgroud)

演示:

In [2]: find_ext(".","py")
Out[2]: 
['./server.py',
 './new.py',
 './ffmpeg_split.py',
 './clean_download.py',
 './bad_script.py',
 './test.py',
 './settings.py']
Run Code Online (Sandbox Code Playgroud)

如果你想要忽略大小写的选项:

from os import path
from glob import glob
def find_ext(dr, ext, ig_case=False):
    if ig_case:
        ext =  "".join(["[{}]".format(
                ch + ch.swapcase())) for ch in ext])
    return glob(path.join(dr, "*." + ext))
Run Code Online (Sandbox Code Playgroud)

演示:

In [4]: find_ext(".","py",True)
Out[4]: 
['./server.py',
 './new.py',
 './ffmpeg_split.py',
 './clean_download.py',
 './bad_script.py',
 './test.py',
 './settings.py',
 './test.PY']
Run Code Online (Sandbox Code Playgroud)


Mar*_*oma 9

Python 3.4 及更高版本:使用 pathlib

由于应该使用 Python 3.4,pathlib因为它使此类任务变得更加简单:

from pathlib import Path

root = "."  # take the current directory as root

for path in Path(root).glob("**/*.pdf"):
    print(path)
Run Code Online (Sandbox Code Playgroud)

给出:

.pyenv/versions/3.8.10/lib/python3.8/site-packages/matplotlib/mpl-data/images/filesave.pdf
Downloads/2023-0310. Martin Thoma (1).pdf
Run Code Online (Sandbox Code Playgroud)

所以它会递归地进入其他目录,包括隐藏的目录。但它没有找到foo.PDF- 它区分大小写。

如果您需要不区分大小写:

.pyenv/versions/3.8.10/lib/python3.8/site-packages/matplotlib/mpl-data/images/filesave.pdf
Downloads/2023-0310. Martin Thoma (1).pdf
Run Code Online (Sandbox Code Playgroud)

早于 Python 3.4:使用 os

递归获取所有 PDF 文件:

import os

all_files = []
for dirpath, dirnames, filenames in os.walk("."):
    for filename in [f for f in filenames if f.endswith(".pdf")]:
        all_files.append(os.path.join(dirpath, filename)
Run Code Online (Sandbox Code Playgroud)


Ahs*_*que 6

您可以使用endswith

files = [f for f in os.listdir('.') if os.path.isfile(f) and f.endswith('.pdf')]
Run Code Online (Sandbox Code Playgroud)


Mac*_*iek 5

您只需要过滤文件名,寻找以“ .pdf”结尾的文件,对吗?

files = [f for f in os.listdir('.') if os.path.isfile(f)]
files = filter(lambda f: f.endswith(('.pdf','.PDF')), files)
Run Code Online (Sandbox Code Playgroud)

现在,您files只包含以.pdf或.PDF结尾的文件名:)