假如我们某个文件夹下有批量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文件的格式。数据会以原来的形式保存。最终结果如下
numpy保存的csv格式如下:
所以为了可读性,大家尽量不要用numpy直接保存csv。
注:我这里是单行读取,因为我txt只有一行内容,有多行的多加个循环批量按行读取txt就行了。也可能多行也能用此程序读取,感觉numpy.loadtxt应该具备这个功能。
相关文章
- 1,读取文件 2,计算各学员平均分,将各学员信息按照平均分从高到低进行排序。 3,为每个学员的生成分数文件,文件名(学号_平均分排名.csv) 4,csv文件包含内容(学号、姓名、平
- python读取csv求平均数,Python-计算CSV文件中每一列的平均值
- vue上传文本文件后读取文本文件中的内容,并用js-yaml处理数据
- Java如何读取txt文件的内容?
- java手机进库程序:txt文件当做小型数据库实现增删改查,存储json数据到txt实体类的序列化和反序列化,修改txt中内容,Jackson操作,io流写入和输出
- java 读取文本_Java如何读取txt文件的内容?
- Java如何更高效且大批量地读取文件数据(tsv,csv,txt等等)
- java中读取properties配置文件中的内容的三种方式
- springMvc 如何通过注解@Value 读取配置文件中的内容(.properties)
- js读取本地 excel文件、txt文件的内容