我有一个目录“ D:\ sta_times \ data \ Gen21 \ data_generation \ csv_data”,其中有24个文件夹。即'Apr2018','Apr2019','Aug2018','Aug2019','Dec2018','Dec2019','Feb2019','Feb2020','Jan2019','Jan2020','Jul2018','Jul2019','Jun2018 ','Jun2019','Mar2019','Mar2020','May2018','May2019','Nov2018','Nov2019','Oct2018','Oct2019','Sept2018','Sept2019'。
每个文件夹中也有一些csv文件。
Eg: In 'Apr2018' there are 'Gen21_et_now.csv','Gen21_mirror_now.csv','Gen21_mnx.csv',
'Gen21_mnx_hd.csv','Gen21_mn_plus.csv','Gen21_movies_now.csv','Gen21_movies_now_hd.csv',
'Gen21_romedy_now.csv','Gen21_romedy_now_hd.csv','Gen21_times_now.csv','Gen21_times_now_uk.csv',
'Gen21_times_now_usa.csv','Gen21_times_now_world.csv','Gen21_zoom.csv','Gen21_zoom_usa.csv'
“ Apr2018”文件夹中有15个文件。
我想从每个文件夹读取每个csv文件,并希望检查每个数据帧的列号。
我想创建字典
{'Apr2018': {'Gen21_et_now': 69,
'Gen21_mirror_now': 69,
'Gen21_mnx': 68,
'Gen21_mnx_hd': 68,
'Gen21_mn_plus': 68,
'Gen21_movies_now': 68,
'Gen21_movies_now_hd': 68,...
'Apr2019': {'Gen21_et_now': 69,
'Gen21_mirror_now': 69,
'Gen21_mnx': 68,...}
其中“ Apr2018”是文件夹,“ Gen21_et_now”是文件,其中69是存在的列数。
我的代码是
import os
import pandas as pd
os.chdir(os.getcwd()+'\\csv_data')
month = {}
chnl_col = {}
for folder in range(len(os.listdir())):
for file in range(len(os.listdir()[folder])):
mydf=pd.read_csv(os.getcwd()+'\\'+os.listdir()[folder]+'\\'+os.listdir(os.listdir()[folder])[file])
ch_data=os.listdir(os.listdir()[folder])[file].split('.')[0]
chnl_col[ch_data]=len(mydf.columns)
month[os.listdir()[folder]]=chnl_col
chnl_col={}
执行代码后,仅读取15个文件中的7个文件。输出是
{'Apr2018': {'Gen21_et_now': 69,
'Gen21_mirror_now': 69,
'Gen21_mnx': 68,
'Gen21_mnx_hd': 68,
'Gen21_mn_plus': 68,
'Gen21_movies_now': 68,
'Gen21_movies_now_hd': 68},...}
对此有何帮助?
答案 0 :(得分:1)
您的代码存在问题,位于for file in range(len(os.listdir()[folder])):
行,因为os.listdir()[folder]
是文件夹(str)的名称,而不是文件夹本身内部文件的列表。因此,len(os.listdir()[folder])
为您提供了目录名称中包含的字母数。您需要像这样更改代码:
import os
import pandas as pd
os.chdir(os.getcwd()+'\\csv_data')
month = {}
chnl_col = {}
for folder in range(len(os.listdir())):
for file in range(len(os.listdir(path=os.getcwd()+'\\'+os.listdir()[folder]))):
mydf=pd.read_csv(os.getcwd()+'\\'+os.listdir()[folder]+'\\'+os.listdir(os.listdir()[folder])[file])
ch_data=os.listdir(os.listdir()[folder])[file].split('.')[0]
chnl_col[ch_data]=len(mydf.columns)
month[os.listdir()[folder]]=chnl_col
chnl_col={}
我认为最好改善变量的名称:使用名称folder
和file
,我们认为您可以操纵对象或对象名称,但实际上可以操纵索引。 / p>