python 读文件夹下面所有csv格式文件


想法源于网络
python 读文件夹下面所有csv格式文件,也可以读txt文件
python 3.7.6 anaconda jupyter notebook

数据

在这里插入图片描述
数据内容 略
分隔符是不等长度的空格

代码

import pandas as pd
import os
def read_csv(filepath ,sep=',',encoding='ANSI',header=0):
    #filepath文件路径'C:\\Users\\Dell\\Desktop\\cal\\cml\\1\\'
    #sep分隔符 默认','
    #encoding编码 默认'ANSI'
    p=[]#返回列表,里面每一个都装着dataframe
    a=[]#装路径
    #获取路径文件夹下面的文件的全部路径
    for file in os.listdir(filepath): 
        a.append(os.path.join(filepath, file))
    #将文件夹下的文件导入成dataframe,再装入列表p,
    #即p[0]是dataframe,一个csv文件的内容
    for i in range(len(a)):
        p1=[]
        path=a[i]
        p1= pd.read_csv(path,sep=sep,encoding=encoding,header=header)
        p.append(p1)
    return p
path=r'C:\Users\Dell\Desktop\cal\cml\3\xinan\xinan'
p=read_csv(path,sep='\s+',encoding='ANSI',header=None)
c=pd.concat(p)#将p里面全部dataframe合成一个

结果

在这里插入图片描述

导出成csv格式文件

path3=r'C:\Users\Dell\Desktop\cal\cml\3\1\1.csv'
c.to_csv(path3,sep=',')

如果输入的路径是乱序的,可参照如下代码:

import re
list1 = [
'F:\\cml\\数据处理\\数据处理\\test\\1998test\\CLDAS_prcp_cut_1998010103.nc',
'F:\\cml\\数据处理\\数据处理\\test\\1998test\\CLDAS_prcp_cut_1998010101.nc',
'F:\\cml\\数据处理\\数据处理\\test\\1998test\\CLDAS_prcp_cut_1998010102.nc',]
new = sorted(list1,key = lambda i:int(re.search(r'(\d{10})',i).group()))
#根据需要替换   r'(\d{10})'
print(new)

正则表达式寻找顺序规律

结果

在这里插入图片描述

实在不会使用正则时,需要选定某个范围文件路径

#例
a1=['CLDAS_prcp_cut_1998010101.nc','CLDAS_prcp_cut_1998031602.nc',
    'CLDAS_prcp_cut_1999043021.nc','CLDAS_prcp_cut_1999062719.nc',
    'CLDAS_prcp_cut_2000032701.nc','CLDAS_prcp_cut_2000030505.nc']

#筛选条件
y=['1998','1999','2000']
m=['02','03','04']
d=['05','16','27','30']
h=['02','19','21']

#装路径
path=[]
for a in a1:
#     if a[15:19] in y and a[19:21] in m and a[21:23] in d and a[23:25] in h:
    if a[15:19] in y :#字符串年份的位置
        if a[19:21] in m :
            if a[21:23] in d :
                if a[23:25] in h:
                    path.append(a)
                else:
                    print('h:',a[23:25])
            else:
                print('d:',a[21:23])
        else:
            print('m:',a[19:21])
    else:
        print('y:',a[15:19])
path

结果

在这里插入图片描述

可能能用
p1[p1['number'].isin([i[0] for i in p.values])]
# isin(xxx),xxx是要选的列表,在number列里面满足要求的数据
# dataframe里面通过列表选择想要的数据
# p1是多的那个dataframe,p是想选的那个dataframe,只有一列的
p1[p1['所选列'].isin(['想要的数据列表'])]

  • 1
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值