Найти все файлы CSV в каталоге, используя Python

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

15 ответов

import os
import glob

path = 'c:\\'
extension = 'csv'
os.chdir(path)
result = [i for i in glob.glob('*.{}'.format(extension))]
print(result)
from os import listdir

def find_csv_filenames( path_to_dir, suffix=".csv" ):
    filenames = listdir(path_to_dir)
    return [ filename for filename in filenames if filename.endswith( suffix ) ]

Функция find_csv_filenames() возвращает список имен файлов в виде строк, которые находятся в каталоге path_to_dir с заданным суффиксом (по умолчанию ".csv").

добавление

Как напечатать имена файлов:

filenames = find_csv_filenames("my/directory")
for name in filenames:
  print name

Используя комбинацию фильтров и лямбда, вы можете легко отфильтровать CSV-файлы в заданной папке.

import os

files = os.listdir("/path-to-dir")    
files = list(filter(lambda f: f.endswith('.csv'), files))

Используйте модуль Python OS, чтобы найти CSV-файл в каталоге.

простой пример здесь:

import os

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

# this is the extension you want to detect
extension = '.csv'

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

Я должен был получить csv файлы, находящиеся в подкаталогах, поэтому, используя ответ от tchlpr, я изменил его, чтобы он лучше всего подходил для моего варианта использования:

import os
import glob

os.chdir( '/path/to/main/dir' )
result = glob.glob( '*/**.csv' )
print( result )
import os

path = 'C:/Users/Shashank/Desktop/'
os.chdir(path)

for p,n,f in os.walk(os.getcwd()):
    for a in f:
        a = str(a)
        if a.endswith('.csv'):
            print(a)
            print(p)

Это поможет определить путь и этих CSV-файлов

Используйте модуль python glob, чтобы легко перечислить нужные нам файлы.

import glob
path_csv=glob.glob("../data/subfolrder/*.csv")

Вы можете просто использовать glob.glob с рекурсивным = true, шаблон ** будет соответствовать любым файлам и ноль или более каталогов, подкаталогов и символических ссылок на каталоги.

import glob, os

os.chdir("C:\\Users\\username\\Desktop\\MAIN_DIRECTORY")

for file in glob.glob("*/.csv", recursive = true):
    print(file)

Хотя решение, данное thclpr, работает, оно сканирует только непосредственные файлы в каталоге, а не файлы в подкаталогах, если таковые имеются. Хотя это не является обязательным требованием, но на тот случай, если кто-то захочет сканировать подкаталоги, приведенные ниже, это код, который использует os.walk

import os
from glob import glob
PATH = "/home/someuser/projects/someproject"
EXT = "*.csv"
all_csv_files = [file
                 for path, subdir, files in os.walk(PATH)
                 for file in glob(os.path.join(path, EXT))]
print(all_csv_files)

Скопировано из этого блога.

Это решение использует фильтр функций Python. Эта функция создает список элементов, для которых функция возвращает true. В этом случае используемая анонимная функция является частичным совпадением ".csv" для каждого элемента списка файлов каталога, полученного с помощью os.listdir("путь, в котором я хочу искать")

import os

filepath= 'filepath_to_my_CSVs'  # for example: './my_data/'

list(filter(lambda x: '.csv' in x, os.listdir('filepath_to_my_CSVs')))

Вы могли бы просто использовать glob с участием recursive = True, шаблон ** будет соответствовать любым файлам и нулю или более каталогам, подкаталогам и символическим ссылкам на каталоги.

      import glob, os

os.chdir("C:\\Users\\username\\Desktop\\MAIN_DIRECTORY")

for file in glob.glob("*/*.csv", recursive = True):
    print(file)

Многие (связанные) ответы меняют рабочий каталог с помощью os.chdir(). Но не обязательно.

Рекурсивно распечатать все файлы CSV в /home/project/ каталог:

      pathname = "/home/project/**/*.csv"

for file in glob.iglob(pathname, recursive=True):
    print(file)

Требуется Python 3.5+. Из документов [1]:

  • может быть либо абсолютным (например, /usr/src/Python-1.5/Makefile) или родственник ( like ../../Tools/*/*.gif)
  • pathname может содержать подстановочные знаки в стиле оболочки.
  • Будь или не результаты сортируются в зависимости от файловой системы.
  • Если recursive правда, узор ** будет соответствовать любым файлам и ноль или более каталогов, подкаталогов и символических ссылок на каталоги

[1] https://docs.python.org/3/library/glob.html#glob.glob

      import os


for file in os.listdir():
    if ".csv" in file:
        print(file)

Простое однострочное решение для вашего текущего каталога:

      import os
[file for file in os.listdir() if '.csv' in file ]

или для подпапки:

      import os
[file for file in os.listdir('subfolder') if '.csv' in file ]

Пожалуйста, используйте этот проверенный рабочий код. Эта функция вернет список всех файлов CSV с абсолютными путями к файлам CSV в указанном вами пути.

import os
from glob import glob

def get_csv_files(dir_path, ext):
    os.chdir(dir_path)
    return list(map(lambda x: os.path.join(dir_path, x), glob(f'*.{ext}')))

print(get_csv_files("E:\\input\\dir\\path", "csv"))
Другие вопросы по тегам