python:读取CSV文件的相关技巧

来源:互联网 发布:迅雷mac版本2.7.8 编辑:程序博客网 时间:2024/05/16 18:00

最近在做爬取网站数据的工作,需要将爬到的数据保存为.csv文件。接下来,我将分别介绍使用pandas模块和使用csv模块读写csv文件的方法。

1.使用pandas写csv文件

(1)只写入一列

#single columnimport pandas as pdlist = ['a','b','c','d','e']df = pd.DataFrame(list)df.to_csv('SingleList.csv')
首先,定义列表list,然后使用pandas模块的DataFrame方法,向csv文件中写入一列。

得到的文件截图如下:


(2)逐列写入csv文件

#write by columnimport pandas as pdlist = ['a','b','c','d','e']datas = {}datas['a'] = ['a1','a2','a3','a4']datas['b'] = ['b1','b2','b3','a4']datas['c'] = ['c1','c2','c3','c4']datas['d'] = ['d1','d2','d3','d4']datas['e'] = ['e1','e2','e3','e4']cols = pd.DataFrame(columns = list)for id in list:    cols[id] = datas[id]cols.to_csv('ByColumn.csv')
首先,定义列表list,它定义了我们要得到的csv文件的列。

通过cols = pd.DataFrame(columns = list),返回一个DataFrame,也就是cols。

接下来,遍历list中的列,分别对每一列写入数据。

注意:每一列写入的行数应该是一样的。

尝试把:datas['e'] = ['e1','e2','e3','e4']

改为datas['e'] = ['e1','e2','e3','e4',‘e5’],结果保错。


正确运行时,得到的结果为:


(3)逐行写入csv文件

#write by rowimport pandas as pddatas = []list = ['a','b','c','d','e']datas.append(['a1','b1','c1','d1','e1'])datas.append(['a2','b2','c2','d2','e2'])datas.append(['a3','b3','c3','d3','e3'])datas.append(['a4','b4','c4','d4','e4'])cols = pd.DataFrame(columns = list)for i in range(0,4):cols.loc[i] = datas[i]cols.to_csv('ByRow.csv') 

同理,首先,定义列表list,它定义了我们要得到的csv文件的列。

通过cols = pd.DataFrame(columns = list),返回一个DataFrame,也就是cols。

然后,通过cols.loc[i] = datas[i],来逐行写入数据,注意datas[i]也是一个列表。

正确运行时,得到的结果为:


(4)先逐行,后逐列写入csv文件

首先,需要说明的是,对于同一个DataFrame,逐行和逐列写不能混用。

那么,如果需要写写入几行,再逐列写入,该怎么办呢?

可以用到Pandas的concat功能。先看代码:

#miximport pandas as pdlist = ['a','b','c','d','e']cols = pd.DataFrame(columns = list)cols.loc[0] = ['aa','bb','cc','dd','ee']datas = {}datas['a'] = ['a1','a2','a3','a4']datas['b'] = ['b1','b2','b3','a4']datas['c'] = ['c1','c2','c3','c4']datas['d'] = ['d1','d2','d3','d4']datas['e'] = ['e1','e2','e3','e4']cols2 = pd.DataFrame(columns = list)for id in list:    cols2[id] = datas[id]result = [cols,cols2]df = pd.concat(result,ignore_index=True)df.to_csv('mix.csv') 

也就是说,分别建立两个dataFrame,然后把它们连起来就可以了。

2.使用csv模块中的reader读文件和writer写文件

(1)使用reader读文件

#readerimport csvcsvfile = file(r'ByRow.csv', 'rb')reader = csv.reader(csvfile)for line in reader:print linecsvfile.close() 
按行读取文件,每一行都是一个list。运行结果如下:


(2)使用writer写文件

首先,来看一下如何写一个新的文件

写多行:

#write multiple rowscsvfile = file(r'newWritten.csv', 'wb')writer = csv.writer(csvfile)res = []res.append(['a','b','c','d','e'])res.append(['a','b','c','d','e'])writer.writerows(res)csvfile.close()

运行结果:


其中,

writerows:用来写多行

writerow:用来写一行

我们用writerow来替换writerows试试看:

#write single rowscsvfile = file(r'newWritten.csv', 'wb')writer = csv.writer(csvfile)res = []res.append(['a','b','c','d','e'])res.append(['a','b','c','d','e'])writer.writerow(res)csvfile.close()
运行结果:

也就是将一个list写入到了一行中。

由此,我们也可以发现,每次使用writer,写的都是整个文件。

那么,如果我们只是想修改已经存在的csv文件中的部分内容呢?

这里要用到的思路是:先读取csv文件,将读取的内容保存下来,例如以list的形式保存,再对list进行修改。

#modify exist file#first readres = []csvreadfile = file(r'ByRow.csv', 'rb')reader = csv.reader(csvreadfile)for line in reader:print lineres.append(line)csvreadfile.close()#modify first rowcsvfile = file(r'ByRow.csv', 'wb')writer = csv.writer(csvfile)res[0] = ['A','B','C','D','E']writer.writerows(res)csvfile.close() #read againcsvreadfile = file(r'ByRow.csv', 'rb')reader = csv.reader(csvreadfile)for line in reader:print linecsvreadfile.close()
运行结果:

-------------------------------------------------------------------------------------------------------------------------------------------

怎么样,对csv文件的基本操作,你学会了吗?



0 0
原创粉丝点击