file-io создать папку - Найти все файлы в каталоге с расширением .txt в Python




15 Answers

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

>>> import glob
>>> glob.glob('./*.txt')
['./outline.txt', './pip-log.txt', './test.txt', './testingvim.txt']
os это пакет

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




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

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



Мне нравится os.walk() :

import os, os.path

for root, dirs, files in os.walk(dir):
    for f in files:
        fullpath = os.path.join(root, f)
        if os.path.splitext(fullpath)[1] == '.txt':
            print fullpath

Или с генераторами:

import os, os.path

fileiter = (os.path.join(root, f)
    for root, _, files in os.walk(dir)
    for f in files)
txtfileiter = (f for f in fileiter if os.path.splitext(f)[1] == '.txt')
for txt in txtfileiter:
    print txt



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



Вы можете просто использовать 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
fnames = ([file for root, dirs, files in os.walk(dir)
    for file in files
    if file.endswith('.txt') #or file.endswith('.png') or file.endswith('.pdf')
    ])
for fname in fnames: print(fname)






Чтобы получить все имена файлов .txt внутри папки 'dataPath' в виде списка на языке Pythonic

from os import listdir
from os.path import isfile, join
path = "/dataPath/"
onlyTxtFiles = [f for f in listdir(path) if isfile(join(path, f)) and  f.endswith(".txt")]
print onlyTxtFiles



Я предлагаю вам использовать 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)



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

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 glob
import os

path=os.getcwd()

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

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



Чтобы получить массив имен файлов «.txt» из папки «данные» в том же каталоге, я обычно использую эту простую строку кода:

import os
fileNames = [fileName for fileName in os.listdir("data") if fileName.endswith(".txt")]



Вот один с extend()

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



используйте модуль Python OS для поиска файлов с определенным расширением.

простой пример:

import os

# This is the path where you want to search
path = r'd:'  

# this is extension you want to detect
extension = '.txt'   # this can be : .jpg  .png  .xls  .log .....

for root, dirs_list, files_list in os.walk(path):
    for file_name in files_list:
        if os.path.splitext(file_name)[-1] == extension:
            file_name_path = os.path.join(root, file_name)
            print file_name
            print file_name_path   # This is the full path of the filter file



Простой метод с использованием цикла for :

import os

dir = ["e","x","e"]

p = os.listdir('E:')  #path

for n in range(len(p)):
   name = p[n]
   myfile = [name[-3],name[-2],name[-1]]  #for .txt
   if myfile == dir :
      print(name)
   else:
      print("nops")

Хотя это можно сделать более обобщенным.






Related