Python 读写csv文件相关操作

文章目录
  1. 1. pandas操作
    1. 1.1. 读取一个普通文件,不加任何操作
    2. 1.2. 读取行
    3. 1.3. pandas 文件写入
  2. 2. csv库操作文件
    1. 2.1. 文件读取
    2. 2.2. 文件写入

emmmm之所以写这篇博客,是因为一个悲伤的故事,上半年四五月份的时候参加了凤凰金融的比赛,那个时候就涉及了很多csv文件的读写问题,当时一心想等比赛完了就好好写个关于csv文件操作的总结,然而人总是…真香…

最后写了一个比较水的总结,一点代码操作都不涉及…
http://klausvon.cn/2018/05/25/%E5%87%A4%E5%87%B0%E9%87%91%E8%9E%8D/
直到现在,再一次参加DF的基金预测…OK,各种操作全忘了…这脸打得,哎,就着这次比赛,刚好也有现成的csv文件,就好好写呗~

关于csv文件,Python里面有两个经常操作这个类型文件的库,一个是pandas,一个就叫csv,两个库各有各的好处呗,下面开始写操作。

pandas操作

读取一个普通文件,不加任何操作

1
2
3
4
5
6
7
8
9
#!/usr/bin/env python
#coding=utf

import csv
import pandas as pd

if __name__=='__main__':
filepath='./data/train_fund_return.csv'
f=pd.read_csv(filepath)

在这里有一个需要注意的地方,如果读取的文件里面含有中文字符,可以在pd.read_csv()里面添加一个encoding参数,设置为gbk

1
pd.read_csv(filepath,encoding='gbk')

如果是Office的软件可以使用Office打开文件设置编码格式为utf-8再在文件里设置encoding=’utf-8’,鉴于我电脑上的软件是WPS,这里用的就是上面的方法。

读取行

read_csv文件对应的loc读出来对应的就是行,从0行开始,loc[0]表示第0行。

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env python
#coding=utf

import csv
import pandas as pd

if __name__=='__main__':
filepath='./data/train_fund_return.csv'
f=pd.read_csv(filepath)
raw=f.loc[0]
print(raw)

关于读出来的这一行可以使用list来修改对应的数据结构,方便后续调用

1
2
3
f=pd.read_csv(filepath)
raw=f.loc[0]
raw=list(raw)

row[0]读出来就是就是原csv文件里面的第一列,带有名称的列,可以使用list(raw)[1:]来直接提取。

pandas 文件写入

这个比较简单,直接pd.to_csv(filepath)就行,相关参数可以查,不过在写入文件这里我比较倾向于csv库自带的writeraw()函数。

csv库操作文件

文件读取

调用csv库的话文件读入和普通的Python文件读入差不多,比如这样:

1
file=open(filepath,'w',newline='')

重点在于那个newline=’’,如果不写这个,最后写入文件的时候会有空行~

文件写入

一般的csv文件都是由index,首列存放的列名和其他栏目存放的value构成,我使用这个库的时候操作是按如下操作:
1.先写入index;
2.分别按行写入数据。

1
2
3
4
5
6
7
8
9
def writeToCsv(dic,out_file,index):
file=open(out_file,'w',newline='')
w=csv.writer(file)
#写入文件索引
w.writerow(index)
#按行写入
for d in dic:
w.writerow(d)
file.close()

重点在于写入索引的时候,writerow写入的是list文件,如果直接把所有的索引放进去,本来第一列上面空的那一格就会被占满,所以一般作为index的文件,我会先定义一个list,具体操作如下:

1
2
test=[]
test.append('')

就是先存入一个空就去,然后再存入后面的index值,这样就能完整的写入一个csv文件了。