Найти все файлы 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
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
правда, узор**
будет соответствовать любым файлам и ноль или более каталогов, подкаталогов и символических ссылок на каталоги
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"))