我想获取文件夹中所有pdf文件的名称列表我有我的python脚本。
现在我有了这段代码:
files = [f for f in os.listdir('.') if os.path.isfile(f)]
for f in files:
e = (len(files) - 1)
问题是这段代码找到了文件夹中的所有文件(包括.py)所以我"修复"如果我的脚本是文件夹中的最后一个文件(zzzz.py),稍后我会减去列表的最后一个文件,即我的script.py。
我尝试了很多代码只能找到.pdf,但这越接近我。
答案 0 :(得分:7)
直接在目录上使用glob查找所有pdf文件:
from os import path
from glob import glob
def find_ext(dr, ext):
return glob(path.join(dr,"*.{}".format(ext)))
演示:
In [2]: find_ext(".","py")
Out[2]:
['./server.py',
'./new.py',
'./ffmpeg_split.py',
'./clean_download.py',
'./bad_script.py',
'./test.py',
'./settings.py']
如果您想要忽略大小写的选项:
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))
演示:
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']
答案 1 :(得分:3)
您只需要过滤文件名称,查找以" .pdf"结尾的文件名,对吧?
files = [f for f in os.listdir('.') if os.path.isfile(f)]
files = filter(lambda f: f.endswith(('.pdf','.PDF')), files)
现在,您的files
仅包含以.pdf或.PDF结尾的文件名称:)
答案 2 :(得分:2)
以递归方式获取所有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)
答案 3 :(得分:1)
您可以使用endswith
:
files = [f for f in os.listdir('.') if os.path.isfile(f) and f.endswith('.pdf')]
答案 4 :(得分:1)
使用glob
模块:
>>> import glob
>>> glob.glob("*.pdf")
>>> ['308301003.pdf', 'Databricks-how-to-data-import.pdf', 'emr-dg.pdf', 'gfs-sosp2003.pdf']