假如我们某个文件夹下有批量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应该具备这个功能。
相关文章
- Jmeter读取csv文件中的json字符串
- Python批量修改Excel中的文件内容 - shuzihua
- Android 读取手机SD卡根目录下某个txt文件的文件内容 - anyuan9
- 如何利用C/C++逐行读取txt文件中的字符串(可以顺便实现文本文件的复制) (转)
- matlab对文本文件、数据文件等的文件读取、操作等实用功能总结(转载 CSDN) matlab中读取txt数据文件(txt文本文档)
- 读取Excel文件中的单元格的内容和颜色
- matlab导入并处理数据:xml、txt、xlsx、csv文件及其批量读取
- MATLAB对于文本文件(txt)数据读取的技巧总结(经典中的经典)
- File类的特点?如何创建File类对象?Java中如何操作文件内容,什么是Io流Io流如何读取和写入文件?字节缓冲流使用原则?
- php中读取文件内容的几种方法。(file_get_contents:将文件内容读入一个字符串)