2015-11-30 2 views
1

Я хочу получить список файлов имя всех pdf-файлов в папке У меня есть сценарий python.Получить список pdf-файлов в папке

Теперь у меня есть этот код:

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

Добавить это test 'и f.lower(). endswith ('. pdf')' в вашем 'списке файлов' – Zety

ответ

0

Вы можете использовать endswith:

files = [f for f in os.listdir('.') if os.path.isfile(f) and f.endswith('.pdf')] 
+0

Причина, по которой нужно обратить внимание, пожалуйста. –

+0

Не уменьшилось, но есть лучшие инструменты для работы, как видно из других ответов, например. glob или fnmatch. –

1

Вам просто нужно отфильтровать имена файлов, ищет те, которые заканчиваются на «.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 :)

+0

Работайте как очарование. –

+0

Я использую ваш код, потому что его легче понять, но я хочу сказать спасибо всем. Большое спасибо –

+0

Добро пожаловать :) – Maciek

0

Используйте glob модуль:

>>> import glob 
>>> glob.glob("*.pdf") 
>>> ['308301003.pdf', 'Databricks-how-to-data-import.pdf', 'emr-dg.pdf', 'gfs-sosp2003.pdf'] 
5

Используйте glob на каталог непосредственно найти все ваши файлы в формате pdf:

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

Demo:

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'] 
0

Чтобы получить все 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)