Найти все файлы в каталоге с расширением .txt в Python


Answers

Используйте glob .

>>> import glob
>>> glob.glob('./*.txt')
['./outline.txt', './pip-log.txt', './test.txt', './testingvim.txt']
Question

Как найти все файлы в каталоге с расширением .txt в python?




import os
[x for x in os.listdir() if x.endswith(".txt")]

КАК МНОГО ФАЙЛОВ В ДИРЕКТОРЕ И СУБДЕРЕ?

Если вы хотите узнать, сколько файлов есть в каталоге и поддиректорах:

В этом примере мы ищем количество файлов, которые включены во весь каталог и его поддиректории.

import os    

def count(dir, counter=0):
    "returns number of files in dir and subdirs"
    for pack in os.walk(dir):
        for f in pack[2]:
            counter += 1
    return dir + " : " + str(counter) + "files"


print(count("F:\\python"))

вывод

'F: \ python': 12057 файлов '




import os

path = 'mypath/path' 
files = os.listdir(path)

files_txt = [i for i in files if i.endswith('.txt')]



Вы можете попробовать этот код

import glob
import os
filenames_without_extension = [os.path.basename(c).split('.')[0:1][0] for c in glob.glob('your/files/dir/*.txt')]
filenames_with_extension = [os.path.basename(c) for c in glob.glob('your/files/dir/*.txt')]



Функциональное решение с подкаталогами:

from fnmatch import filter
from functools import partial
from itertools import chain
from os import path, walk

print(*chain(*(map(partial(path.join, root), filter(filenames, "*.txt")) for root, _, filenames in walk("mydir"))))



import os
import sys 

if len(sys.argv)==2:
    print('no params')
    sys.exit(1)

dir = sys.argv[1]
mask= sys.argv[2]

files = os.listdir(dir); 

res = filter(lambda x: x.endswith(mask), files); 

print res



import glob
import os

path=os.getcwd()

extensions=('*.py','*.cpp')

for i in extensions:
  for files in glob.glob(i):
     print files



Вот один с extend()

types = ('*.jpg', '*.png')
images_list = []
for files in types:
    images_list.extend(glob.glob(os.path.join(path, files)))



Вы можете попробовать этот код:

import glob
import os

os.chdir("D:\...\DirName")
filename_arr={}
i=0
for files in glob.glob("*.txt"):
    filename_arr[i] = files
    i= i+1

for key,value in filename_arr.items():
    print key , value



Попробуйте это, он найдет весь ваш файл внутри папки или папки

import glob, os
os.chdir("H:\\wallpaper")# use whatever you directory 

#double\\ no single \

for file in glob.glob("**/*.psd", recursive = True):#your format
    print(file)



Решение, пригодное для копирования, похожее на приложение ghostdog:

def get_all_filepaths(root_path, ext):
    """
    Search all files which have a given extension within root_path.

    This ignores the case of the extension and searches subdirectories, too.

    Parameters
    ----------
    root_path : str
    ext : str

    Returns
    -------
    list of str

    Examples
    --------
    >>> get_all_filepaths('/run', '.lock')
    ['/run/unattended-upgrades.lock',
     '/run/mlocate.daily.lock',
     '/run/xtables.lock',
     '/run/mysqld/mysqld.sock.lock',
     '/run/postgresql/.s.PGSQL.5432.lock',
     '/run/network/.ifstate.lock',
     '/run/lock/asound.state.lock']
    """
    import os
    all_files = []
    for root, dirs, files in os.walk(root_path):
        for filename in files:
            if filename.lower().endswith(ext):
                all_files.append(os.path.join(root, filename))
    return all_files



path.py - еще одна альтернатива: https://github.com/jaraco/path.py

from path import path
p = path('/path/to/the/directory')
for f in p.files(pattern='*.txt'):
    print f



Я предлагаю вам использовать https://docs.python.org/2/library/fnmatch.html и верхний метод. Таким образом вы можете найти любое из следующего:

  1. Имя. txt ;
  2. Имя. TXT ;
  3. Имя. Текст

,

import fnmatch
import os

    for file in os.listdir("/Users/Johnny/Desktop/MyTXTfolder"):
        if fnmatch.fnmatch(file.upper(), '*.TXT'):
            print(file)



Вы можете просто использовать pathlib s glob 1 :

import pathlib

list(pathlib.Path('your_directory').glob('*.txt'))

или в цикле:

for txt_file in pathlib.Path('your_directory').glob('*.txt'):
    # do something with "txt_file"

Если вы хотите, чтобы он был рекурсивным, вы можете использовать .glob('**/*.txt)

1 Модуль pathlib был включен в стандартную библиотеку в python 3.4. Но вы можете установить back-ports этого модуля даже в более старых версиях Python (например, используя conda или pip ): pathlib и pathlib2 .




Что-то вроде этого будет работать:

>>> import os
>>> path = '/usr/share/cups/charmaps'
>>> text_files = [f for f in os.listdir(path) if f.endswith('.txt')]
>>> text_files
['euc-cn.txt', 'euc-jp.txt', 'euc-kr.txt', 'euc-tw.txt', ... 'windows-950.txt']



Related