怎么用python打开csv文件_使用Python从CSV文件读取数据

怎么用python打开csv文件_使用Python从CSV文件读取数据CSV文件,也就是Comma-separatedValue文件,用sublime打开是这样(数据下载见文末):如果用excel打开是这样(千万别点保存,保存就有问题):来看看怎么打开,如果安装了anaconda,我们先打开JupyterNotebook,新建一个ipynb文件:我们看完数据了,应该从哪里开始?当然是从python官方文档开始!先搜下csv,找到不少结果,csv是python…

大家好,又见面了,我是你们的朋友全栈君。

CSV文件,也就是Comma-separated Value文件,用sublime打开是这样(数据下载见文末):

csv文件.png

如果用excel打开是这样(千万别点保存,保存就有问题):

csv文件excel-1.png

来看看怎么打开,如果安装了anaconda,我们先打开Jupyter Notebook,新建一个ipynb文件:

jupyter-1024x371.png

jupyter2-1024x182.png

我们看完数据了,应该从哪里开始?当然是从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.

好了,我们大概知道怎么写了。

csv读取-1-1024x200.png

简单解释一下代码意思,先整体看一下。

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工作路径和读取文件所在路径保持一致。

找不到路径-1024x357.png

我们需要将其工作路径调整到和enrollments.csv文件同一个路径下,使用”cd d:\anaconda“来改变notebook的工作路径,再次运行就可以了。

工作路径-1024x376.png

注意结果是一个字典,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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162501.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vscode怎么直接运行html_vscode怎么创建项目

    vscode怎么直接运行html_vscode怎么创建项目首先新建一个html文件,取名后缀为XXX.html,如图建好文件之后是空的,然后输入!同时按下tab键就自动生成html目录了目录建好后怎么运行呢?打开扩展商店,输出op就出来了,选择第一个openinbrowser安装安装好了之后就可以运行啦,快捷键是alt+b,当然也可以在项html文件中点击鼠标右键来运行,如图然后选择浏览器来运行,推荐最好选择谷歌,运行效果如下最后有人问,这个中文是怎么设置的?也是在应用商店里面搜索language然后选择中文的下载然后重新启动VSCo

    2022年8月22日
    5
  • oracle sql 字符串拼接_mysql将字符串和数字拼接

    oracle sql 字符串拼接_mysql将字符串和数字拼接一、MySQL在Java中我们通常用加号”+”来实现字符串的拼接,MySQL中也可以使用”+”来实现,比如:先加入测试数据CREATETABLEtest(idINT,nameVARCHAR(10),scoreFLOAT);INSERTINTOtestVALUES(1,’zhang’,98);INSERTINTOtestVALUES(2,’li’,95);Demo1SELECT…

    2022年9月2日
    7
  • 天才就是这样炼成的

    天才就是这样炼成的from 水木社区 天才就是这样炼成的——记菲尔兹奖获得者澳大利亚数学神童、陶哲轩作者:舒锋澳大利亚土生土长的华裔天才陶哲轩(TerrenceTao)于2006年年8月获得数学界的诺贝尔奖–菲尔兹奖(FieldsMedal)。国际数学会(IMU)每年在国际数学大会上颁菲尔兹奖给两至四名数学家,IMU表示,陶教授被颁这个殊荣,是因他对偏微分方程、组合数学、混合分析和堆垒素数论的杰出贡献。陶

    2022年5月8日
    38
  • 垂死挣扎还是涅槃重生 — Delphi XE5 公布会归来感想

    垂死挣扎还是涅槃重生 — Delphi XE5 公布会归来感想

    2021年11月30日
    61
  • RabbitMQ入门:工作队列(Work Queue)

    在上一篇博客《RabbitMQ入门:HelloRabbitMQ代码实例》中,我们通过指定的队列发送和接收消息,代码还算是比较简单的。假设有这一些比较耗时的任务,按照上一次的那种方式,我们要一直等

    2022年2月16日
    68
  • PHP个人博客系统开发历程

    PHP个人博客系统开发历程

    2021年11月14日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号