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文件的基本操作,你学会了吗?
- python:读取CSV文件的相关技巧
- Python csv 的文件读取
- Python-读取csv文件
- python读取CSV文件
- python 读取CSV 文件
- Python读取CSV文件
- Python读取CSV文件
- python读取csv文件
- python 读取csv文件
- python读取csv文件
- python读取csv文件
- Python中读取CSV文件的方法
- python关于CSV文件的读取
- python的读取csv文件数据
- Python读取大容量的csv文件
- python读取CSV文件时的路径
- Python读取复杂CSV文件
- python csv文件读取reader
- 对非线程安全类List<T>的一些总结
- 【bzoj 2461】[BeiJing2011]符环(高维dp+记忆化搜索)
- webview如何打开assets和/data/data/pkg目录下的html文件
- CSS的垂直居中和水平居中总结
- Python3.X 用 pip 安装lxml时出现 “Unable to find vcvarsall.bat ”
- python:读取CSV文件的相关技巧
- 【shader】渐变过度
- Oracle导出表(即DMP文件)的两种方法
- (二)自定义View进阶篇(自定义View的分类和流程)
- git 生成ssh秘钥
- Java-全局变量和局部变量、变量和常量
- hdoj 5667 Sequence(矩阵快速幂、费马小定理)
- 设置eclipse中主题
- Haproxy在socket/tcp下传输数据的使用实例