Encuentra todos los archivos en un directorio con extensión .txt en Python


Answers

Use glob .

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

¿Cómo puedo encontrar todos los archivos en un directorio que tenga la extensión .txt en python?




Aquí hay uno con extend()

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



Solución funcional con subdirectorios:

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

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

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



Algo como esto funcionará:

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



Simplemente puede usar pathlib s glob 1 :

import pathlib

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

o en un bucle:

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

Si lo quieres recursivo, puedes usar .glob('**/*.txt)

1 El módulo pathlib se incluyó en la biblioteca estándar en python 3.4. Pero puedes instalar back-ports de ese módulo incluso en versiones anteriores de Python (es decir, usando conda o pip ): pathlib y pathlib2 .




Te sugiero que uses https://docs.python.org/2/library/fnmatch.html y el método superior. De esta forma puedes encontrar cualquiera de los siguientes:

  1. Nombre. txt ;
  2. Nombre. TXT ;
  3. Nombre. TXT

.

import fnmatch
import os

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



import glob
import os

path=os.getcwd()

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

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



Puedes probar este código:

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



Intenta esto esto encontrará todo tu archivo dentro de la carpeta o carpeta

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)



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

¿CUÁNTOS ARCHIVOS EN DIR Y SUBDIRS?

Si quieres saber cuántos archivos hay en un directorio y subdirectorios:

En este ejemplo, buscamos la cantidad de archivos que se incluyen en todo el directorio y sus subdirectorios.

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"))

salida

'F: \ python': 12057 archivos '




Una solución de pasta de copia similar a la de 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



Puedes probar este código

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