工具&环境

Spyder version: 5.1.5 None

Python version: 3.7.9 64-bit

Operating System: Windows 10

说明:数据为自动生成,可根据自己实际数据套用程序


引言

又是一年,师姐马上毕业。

工作交接,半成品的数据分析结果留下一大堆。

其中有一部分数据长这样:

有N个CSV文件,每个文件中有超50万行,N列数据。




需求

获取N个格式相同文件中指定的某(几)列,如上述数据中B列(学号),C列(评分),并生成各自相应文件如下:



代码实现


# -*- coding: utf-8 -*- """ Created on Wed Apr 6 11:11:00 2022 @author: gaopu """ import pandas as pd import datetime import csv import os dir= "文件所在路径" #指定读取文件列--- 0:第1列 1:第2列 select_col=[1,2] excel_list = [os.path.join(dir, i) for i in os.listdir(dir) if i.endswith('.csv')] for file_path in excel_list: start_time = datetime.datetime.now() file_info =pd.read_csv(file_path,usecols=select_col) #file_info = pd.read_table(file_path,usecols=select_col) file_info.to_csv(file_path+"filter.txt",index=False, sep="t", quoting=csv.QUOTE_NONE,header=True) print(datetime.datetime.now()-start_time)


核心代码讲解

1、子文件获取(筛选指定文件)

endswith('.csv')

这里'.csv'可以更换其他,如:'.txt'

excel_list = [os.path.join(dir, i) for i in os.listdir(dir) if i.endswith('.csv')]

2、读取文件内容,指定某(几)列

如果第一步为过滤使用了'.txt'

那么,


file_info =pd.read_csv(file_path,usecols=select_col)


pd.read_csv需要修改成pd.read_table


3、select_col=[1,2]

数组中1,2是列索引(角标), 从0开始为第一列,依次递增。

如果想要获取第4、6、7列,那么这里改成[3,5,6]即可



结果:

我在代码中添加了时间戳计算,可以看出每个文本处理时间0.8s左右,速度可以接受。



文件输出:


file_info.to_csv(file_path+"filter.txt",index=False, sep="t", quoting=csv.QUOTE_NONE,header=True)

第1个参数是文件输出路径和名称,

sep="t"参数是列之间数据以制表符分割,此处可更改为自己特定分隔符。



上面代码可以直接拿来即用哟!


文末

天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。人之为学有难易乎?学之,则难者亦易矣;不学,则易者亦难矣。——彭端淑《为学一首示子侄》