批量读取txt文件中的内容进入csv文件

时间:2024-03-14 22:25:11

假如我们某个文件夹下有批量txt文件,我们想把这些文件的内容读入csv文件中以便程序做下一步处理,此时我们就需要实现从txt–>csv的转换,网上很多例子,不过不怎么好使,于是自己基于python写了一个批量读取txt到csv的程序。(假入你的文件不是txt的,但是改了扩展名成txt之后内容不变,建议大家使用一键更名器SRename更改后缀名)。好了,话不多说,开始撸程序:
#--coding:utf-8 --
import os.path
import numpy
import pandas as pd
import random
txt_path=os.getcwd()+’/2004_qd/’    #获取txt文件路径
print(txt_path)
txt_list=os.listdir(txt_path)    #将txt文件存入列表中
txt_list.sort()    #
txt_list.sort(key=lambda x: int(x[:-4]))    #这两句将txt文件名(不包含后缀,所以是int(x[:-4]),意思是不包含最后四位.txt)排序,如果没有特殊要求,这个排序可以不要,因为我是时间序列,所以排了一下序
print(txt_list)
print(len(txt_list))
csv_file=[]#    创建保存csv文件内容的列表
csv_file_title=[‘Visibility’,‘Wind_dire’,‘Wind_speed’,‘hPA’,‘3hour_hPA’,‘Rain’,‘Dew_point’,‘Cloud’,‘Weather’,‘Temp’]    #设置行索引
for txt in txt_list:    #遍历txt文件
      f=numpy.loadtxt(txt_path+txt)    #读入当前txt文件的内容
      f=f.reshape(1,f.shape[0])    #转置,因为我的txt内容只有一行,默认读进来放成一列,这样我不好设置行索引
      for i in range (f.shape[1]-1):    #这个循环可以不要,我是为了去掉(替换)异常值
            if(f[0,i]==9999):
            if(f[0,10]<10):
            f[0,i]=random.uniform(2,7)
            if(f[0,10]>=10):
            f[0,i]=random.uniform(0,1)
      csv_file.extend(f)    #将处理之后的内容放入列表中
csv_file=numpy.array(csv_file)#将列表转换为数组
csv_file=csv_file[:,3:13]    #去掉前三列0,1,2.不需要的可以注释本行
csv_file[:,[0,7]]=csv_file[:,[7,0]]    #交换第0列和第8列,不需要的可以注释本行
numpy.savetxt(‘2004_qd.csv’,csv_file,delimiter=’,’)    #用numpy保存数据为csv。此时里面内容没有行索引,且数据为浮点型,丧失了csv文件的格式
df=pd.read_csv(‘2004_qd.csv’,names=csv_file_title)    #用pd读存好的csv。设置行索引
df.to_csv(‘2004_qd_processed.csv’,index=True)    #将具有索引的数据重新保存成csv文件,此时不会丧失csv文件的格式。数据会以原来的形式保存。最终结果如下
批量读取txt文件中的内容进入csv文件
numpy保存的csv格式如下:
批量读取txt文件中的内容进入csv文件
所以为了可读性,大家尽量不要用numpy直接保存csv。
注:我这里是单行读取,因为我txt只有一行内容,有多行的多加个循环批量按行读取txt就行了。也可能多行也能用此程序读取,感觉numpy.loadtxt应该具备这个功能。