Pandas: Как прочитать файлы xlsx из папки, соответствующей только указанным c именам - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть папка, полная файлов Excel, и мне нужно прочитать только 3 файла из этой папки и поместить их в отдельные кадры данных.

File1: Asterix_New file_Jan2020.xlsx
File2: Asterix_Master file_Jan2020.xlsx
File3: Asterix_Mapping file_Jan2020.xlsx

Мне известен следующий синтаксис, который находит файл xlsx из папку, но не знаю, как связать ее с указанными c ключевыми словами. В этом случае, начиная с "Asterix _"

files_xlsx = [f for f in files if f[-4:] == "xlsx"]

Также я пытаюсь поместить каждый файл Excel в отдельный фрейм данных, но не получаю успеха:

for i in files_xlsx:
    df[i] = pd.read_excel(files_xlsx[0])

Любые предложения приветствуются .

Ответы [ 5 ]

3 голосов
/ 28 февраля 2020

Я предлагаю использовать pathlib . Если все файлы находятся в папке:

from pathlib import Path
from fnmatch import fnmatch
folder = Path('name of folder')

Поиск файлов с помощью glob. Я также предлагаю использовать fnmatch для включения файлов, чьи расширения написаны заглавными буквами.

iterdir позволяет перебирать файлы в папке

name - это метод в pathlib, который дает вам имя файла в строковом формате

, используя метод str lower, который обеспечивает захват расширений, таких как XLSX, заглавных букв

 excel_only_files = [xlsx for xlsx in folder.iterdir()
                     if fnmatch(xlsx.name.lower(),'asterix_*.xlsx')]

ИЛИ

#you'll have to test this, i did not put it though any tests
excel_only_files = list(folder.rglob('Asterix_*.[xlsx|XLSX]')

оттуда, вы можете запустить понимание списка, чтобы прочитать ваши файлы:

 dataframes = [pd.read_excel(f) for f in excel_only_files]
2 голосов
/ 28 февраля 2020

Используйте glob.glob, чтобы соответствовать шаблону

import glob

for i in glob.glob('Asterix_*.xlsx'):
    ...
1 голос
/ 28 февраля 2020

Сначала создайте список файлов, которые вы хотите прочитать, используя glob (на основе ответа @ cup), а затем добавьте их в список.

import pandas as pd
import glob

my_df_list = [pd.read_excel(f) for f in glob.iglob('Asterix_*.xlsx')]

В зависимости от того, чего вы хотите достичь, Вы также можете использовать dict для разрешения пар ключ-значение.

0 голосов
/ 28 февраля 2020

Если вы прочитали имена файлов, вы можете убедиться, что они начинаются и заканчиваются нужными строками, используя следующее понимание списка:

files = ['filea.txt', 'fileb.xlsx', 'filec.xlsx', 'notme.txt']
files_xlsx = [f for f in files if f.startswith('file') and f.endswith('xlsx')]
files_xlsx # ['fileb.xlsx', 'filec.xlsx']

В понимании списка сказано: «Дайте мне все файлы, которые начинаются с file И заканчиваются xlsx.

0 голосов
/ 28 февраля 2020

В конце оператора if вам нужно добавить еще одно условие для файлов, которые также содержат 'Asterix _':

files_xlsx = [f for f in files if f[-4:] == "xlsx" and "Asterix_" in f]

f[-4:] == "xlsx" должен убедиться, что последние 4 символа имени файла xlsx и "Asterix_" in f гарантирует, что "Asterix_" существует в любом месте имени файла.

Чтобы затем прочитать их, используя pandas, попробуйте:

for file in excel_files:
    df = pd.read_excel(file)
    print(df)

Это должно напечатать результат DataFrame, считанный из файла Excel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...