我使用以下代码将一组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:没有要连接的对象
你能帮忙吗?感谢..
答案 0 :(得分:2)
我的建议使用glob.glob
获取与指定字符串匹配的所有匹配文件/目录的列表,然后使用os
模块检查每个匹配的文件/目录以确保它是文件。它返回与glob.glob()匹配的ONLY文件列表。
import glob
import os
files_only = [file for file in glob.glob('/path/to/files/*.ext') if not os.path.isdir(file)]
然后,您可以在read_csv循环中使用files_only列表。
所以在你的代码中:
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
答案 1 :(得分:0)
即使您的allFiles = glob.glob(path + "/*.csv")
变量以正斜杠结尾,也可以调用path
。这样,它最终为allFiles = glob.glob("/Users/user/desktop/Sales//*.csv")
看看修复是否有助于解决您的错误。