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

时间:2020-09-29 07:40:52

标签: python

我有一个目录“ 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},...}

对此有何帮助?

1 个答案:

答案 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={}

我认为最好改善变量的名称:使用名称folderfile,我们认为您可以操纵对象或对象名称,但实际上可以操纵索引。 / p>