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文件读取数据相关推荐

  1. python打开excel数据库_使用python导入excel文件中的mssql数据库数据

    我试图用python导入excel文件中的mssql数据库数据.我的数据在excel表格中的顺序不正确.e. g它显示第1列数据,然后是第3列,第2列,然后是第4列,依此类推. 我使用以下脚本:imp ...

  2. python打开各种文件格式_使用python读取数据科学最常用的文件格式(转)

    Author:kevinelstri DateTime:2017/3/13 1.什么是文件格式? 文件格式是在文件中存储信息的一种标准方法.首先,文件格式指定文件是一个二进制或ASCII文件.其次,文 ...

  3. python打开中文文件名_解决python打开中文文件名乱码的问题

    解决python打开中文文件名乱码的问题 发布时间:2020-07-27 11:20:22 来源:亿速云 阅读:162 作者:清晨 小编给大家分享一下解决python打开中文文件名乱码的问题,相信大部 ...

  4. python打开哪个答案_关于 Python 文件的 ‘r’ 打开模式,哪个选项的描述是正确的?_学小易找答案...

    [单选题]以下选项对文件描述错误的是( ). [单选题]关于 Python 的元组类型,以下选项错误的是: [单选题]下列程序的输出结果为[ ]. def fun(a,b): return a+b c ...

  5. python打开中文文件名_[请教]python的中文文件名处理

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 3 楼的可以用 sys.getfilesystemencoding 检测,但由於文件系统的差异,文件名 100% 无损转还是不太可,比如很多 *nix 的 ...

  6. python打开方式包括_运行Python程序有两种方式:________和________。

    运行Python程序有两种方式:________和________. 答: 交互式 文件式 自觉的人,心目中有一张蓝图,人生理想.但是不知道世界的游戏规则 答:× 山水画的鉴赏方法? 答:1.首先看风 ...

  7. 用python打开ccd相机_用python测量CCD图像

    我正在尝试实现一个非常简单的天体测量代码.我已经手动在我的照片中找到了几个星星的坐标(RA/DEC和x/y像素). 一切似乎都是直截了当的,但我还是得到了奇怪的结果,偏离了几度.在 我正在尝试求解我拍 ...

  8. java dom xml 换行,dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件...

    网友求助:dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件 问题importjava.text.SimpleDateFormat; import ...

  9. java 循环读取文件_您如何用Java连续读取文件?

    小编典典 这有点旧,但是我已经使用了该机制,并且效果很好. 诀窍是使用java.io.RandomAccessFile和,并定期检查文件长度是否大于当前文件位置.如果是,则读取数据.当您达到长度时,您 ...

最新文章

  1. class pybind11::module 没有成员 def
  2. 自学python要多久才能学会-怎么自学python,大概要多久?
  3. 本地化中文示例代码需求调查
  4. java static调用吗_java中使用static
  5. js之事件冒泡和事件捕获详细介绍
  6. linux下安装postgresql遇到的问题(zlib library not found,readline library not found)
  7. 三维激光雷达点云匹配最近工作总结
  8. CC2640R2F学习笔记(2)——OLED屏使用
  9. 自定义ViewPager和RecyclerView指示器 Indicator
  10. 八六、Linux 服务器+Nginx服务简介
  11. win7系统访问局域网中的wamp服务器
  12. matlab 进行非线性回归,5.利用Matlab编程进行非线性回归分析.doc
  13. Linux查找目录或文件
  14. 数码相机和单反相机区别
  15. 小程序业务域名配置如何将文件放置在域名根目录说明
  16. Internet安全协议 学习笔记
  17. Vanish搭建CDN的节点集群
  18. spring mvc框架、mvc框架模式
  19. 计算机考试网站配置参数错误,电脑一直显示数据配置错误怎么办
  20. Unity 自定义圆形图片

热门文章

  1. 2014.12.1---Thema:EchartsD3
  2. Diskpart命令安装系统小结
  3. java1.8输出语句_[【小白学Java——干货】1.初学Java,认识语法、变量与输出语句...
  4. fibonacci数列前20项_数学第十七课:数列综合应用第一弹
  5. oracle group by 取最新的一条_大国智能制造全文免费阅读_大国智能制造最新章节_乌溪小道的小说...
  6. linux一键安装python_Linux下,一键安装python3;适用于Centos、Debian、Ubuntu等
  7. mysql setnull_1、Mysql无法创建外键的原因 2、MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用...
  8. matlab 矩阵引用,MATLAB矩阵生成、引用
  9. java stdout库_Java重写StdOut并将日语写入文件
  10. 想拥有高清壁纸不用那么麻烦!