怎么用python打开csv文件_使用Python从CSV文件读取数据
CSV文件,也就是Comma-separated Value文件,用sublime打开是这样(数据下载见文末):
如果用excel打开是这样(千万别点保存,保存就有问题):
来看看怎么打开,如果安装了anaconda,我们先打开Jupyter Notebook,新建一个ipynb文件:
我们看完数据了,应该从哪里开始?当然是从python官方文档 开始!先搜下csv,找到
不少结果,csv是python一个模块,有不少方法。要用这个库,就要导入,但是csv不支持Unicode输入。稳妥起见,还是选择unicodecsv模块。
如果要打开文件,应该是open这个关键词吧,搜一下,结果看起来好复杂!抽取下,发现基本格式是open(name[, mode[, buffering]]),name是欲打开文件的名字,mode是打开方式(r是读,w是写,如果没有这个参数那默认是r),当然加上b也是极好的,意思就是Opens a file for reading only in binary format。
buffering这个参数是可选参数,暂时不管。
open(name[, mode[, buffering]])
Open a file, returning an object of the file type described in section File Objects. If the file cannot be opened, IOError is raised. When opening a file, it’s preferable to use open() instead of invoking the file constructor directly.
找到了官方文档的例子
import csv
with open('some.csv', 'rb') as f:
reader = csv.reader(f)
for row in reader:
print row
看起来可以直接用,我们试一试。
import unicodecsv
with open('enrollments.csv', 'rb') as f:
reader = unicodecsv.reader(f)
for row in reader:
enrollments.append(row)
enrollments[0]
输出结果是[u’account_key’,u’status’,u’join_date’,u’cancel_date’,u’days_to_cancel’,u’is_udacity’,u’is_canceled’],看起来像表头,我们再看看enrollments[1]是什么:
[u’448′, u’canceled’, u’2014-11-10′, u’2015-01-14′, u’65’, u’True’, u’True’]
还有enrollments[2]是什么
[u’448′, u’canceled’, u’2014-11-05′, u’2014-11-10′, u’5′, u’True’, u’True’]
原来是一行一行的读,是列表形式,不带表头的。如果我们想带表头怎么办?有一个方法,用DictReader,看看官方文档怎么说:
class csv.DictReader(csvfile, fieldnames=None, restkey=None, restval=None, dialect=’excel’, *args, **kwds)
Create an object which operates like a regular reader but maps the information read into a dict whose keys are given by the optional fieldnames parameter. The fieldnames parameter is a sequence whose elements are associated with the fields of the input data in order. These elements become the keys of the resulting dictionary.
好了,我们大概知道怎么写了。
简单解释一下代码意思,先整体看一下。
import unicodecsv
enrollments = []
f= open('enrollments.csv', 'rb')
reader = unicodecsv.DictReader(f)
for row in reader:
enrollments.append(row)
f.close()
enrollments[0]
然后一句一句解读。
import unicodecsv
#导入unicodecsv模块,其实导入csv也行,只不过unicodecsv能够处理更多格式的字体
enrollments = []
#创建一个名为enrollments的列表,其实下面的reader这个迭代器也能够迭代,但只能迭代一次,后面我们需要多次用到迭代,
#所以我们创建一个列表,可以多次迭代
f= open('enrollments.csv', 'rb')
reader = unicodecsv.DictReader(f)
#以只读方式打开enrollments.csv文件,写入到f文件句柄里
#以字典形式读取f文件句柄里的内容,写入到reader里,reader是一个迭代器(只能迭代一次)
for row in reader:
enrollments.append(row)
#开始for循环,使用append方法将文件的每一行添加到之前创建的enrollments列表里
f.close()
#关闭f文件句柄
enrollments[0]
#打印第一个元素
点击运行按钮,运行出现错误!报错为没有找到该文件,什么原因导致的呢?jupyter notebook工作路径导致的。需要将jupyter notebook工作路径和读取文件所在路径保持一致。
我们需要将其工作路径调整到和enrollments.csv文件同一个路径下,使用”cd d:\anaconda“来改变notebook的工作路径,再次运行就可以了。
注意结果是一个字典,u’account_key’:u’448’这里的u表示unicode,本质上这里的448及所有的键值都是字符串类型。
我们可以简写这段代码,用‘with…as f’就可以省去f.close()这一句,即不需要再写关闭语句。
import unicodecsv
enrollments = []
with open('enrollments.csv', 'rb') as f:
reader = unicodecsv.DictReader(f)
for row in reader:
enrollments.append(row)
enrollments[0]
另外,可以由更简便的方法把迭代器变成列表,由最初的8行变成了5行,输出结果一样。看看官方文档
class list([iterable])
Return a list whose items are the same and in the same order as iterable‘s items. iterable may be either a sequence, a container that supports iteration, or an iterator object. If iterable is already a list, a copy is made and returned, similar to iterable[:]. For instance, list(‘abc’) returns [‘a’, ‘b’, ‘c’] and list( (1, 2, 3) ) returns [1, 2, 3]. If no argument is given, returns a new empty list, [].
那我们就试试,这样就不用新建空列表:
import unicodecsv
with open('enrollments.csv', 'rb') as f:
reader = unicodecsv.DictReader(f)
enrollments = list(reader)
enrollments[0]
如果需要读取多个文件,如果读取三个文件,就要把语句写3遍,后续debug也麻烦,这时候就需要考虑自己创建一个函数。
def read_csv(filename):
with open(filename, 'rb') as f:
reader = unicodecsv.DictReader(f)
return list(reader)
这样就能够读取不同的文件了。
enrollments = read_csv('enrollments.csv')
daily_engagement = read_csv('daily_engagement.csv')
project_submissions = read_csv('project_submissions.csv')
数据文件下载, 密码: 57h5
怎么用python打开csv文件_使用Python从CSV文件读取数据相关推荐
- python打开excel数据库_使用python导入excel文件中的mssql数据库数据
我试图用python导入excel文件中的mssql数据库数据.我的数据在excel表格中的顺序不正确.e. g它显示第1列数据,然后是第3列,第2列,然后是第4列,依此类推. 我使用以下脚本:imp ...
- python打开各种文件格式_使用python读取数据科学最常用的文件格式(转)
Author:kevinelstri DateTime:2017/3/13 1.什么是文件格式? 文件格式是在文件中存储信息的一种标准方法.首先,文件格式指定文件是一个二进制或ASCII文件.其次,文 ...
- python打开中文文件名_解决python打开中文文件名乱码的问题
解决python打开中文文件名乱码的问题 发布时间:2020-07-27 11:20:22 来源:亿速云 阅读:162 作者:清晨 小编给大家分享一下解决python打开中文文件名乱码的问题,相信大部 ...
- python打开哪个答案_关于 Python 文件的 ‘r’ 打开模式,哪个选项的描述是正确的?_学小易找答案...
[单选题]以下选项对文件描述错误的是( ). [单选题]关于 Python 的元组类型,以下选项错误的是: [单选题]下列程序的输出结果为[ ]. def fun(a,b): return a+b c ...
- python打开中文文件名_[请教]python的中文文件名处理
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 3 楼的可以用 sys.getfilesystemencoding 检测,但由於文件系统的差异,文件名 100% 无损转还是不太可,比如很多 *nix 的 ...
- python打开方式包括_运行Python程序有两种方式:________和________。
运行Python程序有两种方式:________和________. 答: 交互式 文件式 自觉的人,心目中有一张蓝图,人生理想.但是不知道世界的游戏规则 答:× 山水画的鉴赏方法? 答:1.首先看风 ...
- 用python打开ccd相机_用python测量CCD图像
我正在尝试实现一个非常简单的天体测量代码.我已经手动在我的照片中找到了几个星星的坐标(RA/DEC和x/y像素). 一切似乎都是直截了当的,但我还是得到了奇怪的结果,偏离了几度.在 我正在尝试求解我拍 ...
- java dom xml 换行,dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件...
网友求助:dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件 问题importjava.text.SimpleDateFormat; import ...
- java 循环读取文件_您如何用Java连续读取文件?
小编典典 这有点旧,但是我已经使用了该机制,并且效果很好. 诀窍是使用java.io.RandomAccessFile和,并定期检查文件长度是否大于当前文件位置.如果是,则读取数据.当您达到长度时,您 ...
最新文章
- class pybind11::module 没有成员 def
- 自学python要多久才能学会-怎么自学python,大概要多久?
- 本地化中文示例代码需求调查
- java static调用吗_java中使用static
- js之事件冒泡和事件捕获详细介绍
- linux下安装postgresql遇到的问题(zlib library not found,readline library not found)
- 三维激光雷达点云匹配最近工作总结
- CC2640R2F学习笔记(2)——OLED屏使用
- 自定义ViewPager和RecyclerView指示器 Indicator
- 八六、Linux 服务器+Nginx服务简介
- win7系统访问局域网中的wamp服务器
- matlab 进行非线性回归,5.利用Matlab编程进行非线性回归分析.doc
- Linux查找目录或文件
- 数码相机和单反相机区别
- 小程序业务域名配置如何将文件放置在域名根目录说明
- Internet安全协议 学习笔记
- Vanish搭建CDN的节点集群
- spring mvc框架、mvc框架模式
- 计算机考试网站配置参数错误,电脑一直显示数据配置错误怎么办
- Unity 自定义圆形图片
热门文章
- 2014.12.1---Thema:EchartsD3
- Diskpart命令安装系统小结
- java1.8输出语句_[【小白学Java——干货】1.初学Java,认识语法、变量与输出语句...
- fibonacci数列前20项_数学第十七课:数列综合应用第一弹
- oracle group by 取最新的一条_大国智能制造全文免费阅读_大国智能制造最新章节_乌溪小道的小说...
- linux一键安装python_Linux下,一键安装python3;适用于Centos、Debian、Ubuntu等
- mysql setnull_1、Mysql无法创建外键的原因 2、MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用...
- matlab 矩阵引用,MATLAB矩阵生成、引用
- java stdout库_Java重写StdOut并将日语写入文件
- 想拥有高清壁纸不用那么麻烦!