怎么用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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • navict 15激活码_最新在线免费激活2022.02.17

    (navict 15激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlFZP9ED60OK-eyJsaWNlbnNlSWQi…

    2022年4月1日
    47
  • golang 2021激活 3月最新注册码

    golang 2021激活 3月最新注册码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    94
  • 搭建大众点评CAT监控平台

    搭建大众点评CAT监控平台

    2021年6月14日
    114
  • Linux教程+操作系统教程

    Linux教程+操作系统教程.Linux入门教程http://c.biancheng.net/cpp/linux/基础教程Linux简介Linux文件管理Linux目录Linux文件权限和访问模式Linux环境变量Linux打印文件和发送邮件Linux管道和过滤器Linux进程管理Linux网络通信工具vi编辑器Linux文件系统Linux文件存储结构Linux用户管理Linux系统性能分析Linux系统日志及…

    2022年10月13日
    0
  • SQL2008安装教程

    SQL2008安装教程1、首先,在安装文件setup.exe上,单击鼠标右键选择”以管理员的身份运行”,如下图所示:2、首先单击安装光盘中的setup.exe安装文件,打开如下所示的”SQLServer安装中心”对话框:3、选择左边的安装选项,单击右边的”全新SQLServer独立安装或向现有安装添加功能”选项,如图所示:4、在打开的”SQLServer2

    2022年6月23日
    22
  • Acquia Drupal「建议收藏」

    Acquia Drupal「建议收藏」Acquia是一家有Drupal创建者Dries成立的一家公司,Acquia Drupal是一款商业软件,有些部分非开源的。Drupal与Acquia Drupal的关系就像Eclilpse和Myeclipse的关系一样。AcquiaDrupalforWindows的安装需要通过微软的WebMatrix进行安装。通过WebMatrix可以利用CMS快速创建网站。http

    2022年5月10日
    33

发表回复

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

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