Python - Копирование CSV-файлов в Dataframe (но пропустить подпапки) - PullRequest
0 голосов
/ 03 мая 2018

Я использую приведенный ниже код для чтения набора файлов CSV из папки в Dataframe. Однако эта папка имеет подпапку вместе с этими CSV-файлами. Как я мог пропустить подпапку и только читать файл CSV. Приведенный ниже код выдает ошибку, когда я пытаюсь запустить эту папку с подпапкой.

import pandas as pd
import glob
import numpy as np
import os
import datetime
import time

path = r'/Users/user/desktop/Sales/'


allFiles = glob.glob(path + "/*.csv")
frame = pd.DataFrame()
list_ = []
for file_ in allFiles:
    df = pd.read_csv(file_,index_col=None, header=0)
    list_.append(df)
sale_df = pd.concat(list_)
sale_df

Error message : IsADirectoryError: [Errno 21] Is a directory: 
'/Users/user/desktop/Sales/2018-05-03/20180503000513-kevin@store.com- 
190982.csv-1525305907670.csv'

Может ли кто-нибудь помочь в этом. Спасибо

РЕДАКТИРОВАТЬ: Проблема в том, что подкаталог имеет расширение .csv, присутствующее в имени подкаталога.

РЕДАКТИРОВАТЬ в коде

path =r'/Users/user/desktop/Sales/2018-05-03/'
files_only = [file for file in 
glob.glob('/Users/user/desktop/Sales/2018-05-03/*.csv') if not 
os.path.isdir(file)]
frame = pd.DataFrame()
list_ = []
for file_ in allFiles:
    df = pd.read_csv(files_only,index_col=None, header=0)
    list_.append(df)
sale_df = pd.concat(list_)
sale_df['filename'] = os.path.basename(csv)
sale_df.append(frame)
sale_df

Получите приведенную ниже ошибку

ValueError: нет объектов для объединения

Не могли бы вы помочь. Спасибо ..

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Вы вызываете allFiles = glob.glob(path + "/*.csv"), даже если ваша переменная path заканчивается косой чертой. Таким образом, это заканчивается как allFiles = glob.glob("/Users/user/desktop/Sales//*.csv").
Посмотрите, поможет ли это исправить вашу ошибку.

0 голосов
/ 03 мая 2018

Мое предложение использует glob.glob, чтобы получить список всех соответствующих файлов / каталогов, которые соответствуют указанной строке, затем использует модуль os, чтобы проверить каждый соответствующий файл / каталог, чтобы убедиться, что это файл. Он возвращает список ТОЛЬКО файлов, которые соответствуют glob.glob ().

import glob
import os

files_only = [file for file in glob.glob('/path/to/files/*.ext') if not os.path.isdir(file)]

Затем вы можете использовать список files_only в цикле read_csv.

Так в вашем коде:

files_only = [file for file in glob.glob('/Users/user/desktop/Sales/2018-05-03/*.csv') if not os.path.isdir(file)]
frame = pd.DataFrame()
list_ = []
for file in files_only:
    df = pd.read_csv(file,index_col=None, header=0)
    list_.append(df)
sale_df = pd.concat(list_)
sale_df['filename'] = os.path.basename(csv)
sale_df.append(frame)
sale_df
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...