Python 从目录中读取多个CSV文件以检查列数

Python 从目录中读取多个CSV文件以检查列数,python,Python,我有一个目录“D:\sta\u times\data\Gen21\data\u generation\csv\u data”,其中有24个文件夹。也就是说。”2018年4月、2019年4月、2018年8月、2019年8月、2019年12月、2019年2月、2019年1月、2020年1月、2018年7月、2019年7月、2018年6月、2019年3月、2020年5月、2019年5月、2018年11月、2019年10月、2019年9月、2019年1月、2020年1月、2018年7月、2018年6月、

我有一个目录“D:\sta\u times\data\Gen21\data\u generation\csv\u data”,其中有24个文件夹。也就是说。”2018年4月、2019年4月、2018年8月、2019年8月、2019年12月、2019年2月、2019年1月、2020年1月、2018年7月、2019年7月、2018年6月、2019年3月、2020年5月、2019年5月、2018年11月、2019年10月、2019年9月、2019年1月、2020年1月、2018年7月、2018年6月、2019年6月、2019年5月

每个文件夹中都有一些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},...}

这方面的任何帮助???

代码的问题在于范围内的文件(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={}

我认为最好改进变量的名称:使用名称
文件夹和
文件
我们相信您可以操作对象或对象名称,但实际上您可以操作索引。

这行的最后一部分看起来不正确:
mydf=pd.read\u csv(os.getcwd()+'\\'+os.listdir()[folder]+“\\”+os.listdir(os.listdir()[folder])[file])
尝试使用,将使您的代码更加丰富readable@archer如果这一行不正确,那么我的字典就不会为单个csv文件创建。您可以指定上述代码中不正确的部分吗?您也应该避免在索引上循环。例如,对os.listdir()中的文件夹执行