python - 从目录中读取多个 CSV 文件以检查列数
问题描述
我有一个目录“D:\sta_times\data\Gen21\data_generation\csv_data”,其中有 24 个文件夹。即。'Apr2018'、'Apr2019'、'Aug2018'、'Aug2019'、'Dec2018'、'Dec2019'、'Feb2019'、'Feb2020'、'Jan2019'、'Jan2020'、'Jul2018'、'Jul2019'、'Jun20' '、'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},...}
对此有任何帮助吗?
解决方案
您的代码存在问题,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
我们相信您操纵对象或对象名称,但实际上您操纵索引。
推荐阅读
- yocto - 将 DISTRO_FEATURES 添加到图像 bitbake 配方
- java - 无法从 Java Netbeans 连接到 Mariadb
- javascript - Javascript 任意单击多个实例的值
- angular - 是否可以为谷歌地图标记剪辑图像
- sql-server - sql server - 如果id中有重复值,则将两列的数据合并到另一列
- javascript - React Native 可能出现未处理的 Promise Rejection (id: 0):
- html - Chrome 正在垂直拉伸我的图像,但在 Firefox/Edge 中一切正常
- windows - 在 x86 MASM 程序集中打开具有给定路径的文本文件
- python - 将 Python 包安装到指定的目的地(远离默认值或根目录)
- python - 在列表理解中访问不同的 JSON 键/值对