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


相关推荐

  • sql里declare_oracle declare语法

    sql里declare_oracle declare语法DECLARE为sql中的关键字,主要用于申明变量。本文简单介绍了其使用方法,主要为一般变量的申明和查看和表变量的使用和查看。

    2022年8月20日
    8
  • js漂浮广告代码_JavaScript上传文件代码

    js漂浮广告代码_JavaScript上传文件代码//浮动广告代码varx=50,y=60; //设置元素在浏览器窗口中的初始位置varxin=true,yin=true;//设置xin、yin用于判断元素是否在窗口范围内varstep=1; //可设置每次移动几像素varobj=document.getElementById(“Ad”);//通过id获取div元素functionfloatAd(){varL=T=0;varR=document.body.clientWidth-obj.off

    2022年9月20日
    4
  • MRT(MODIS Reprojection Tool) 下载及安装教程[通俗易懂]

    MRT(MODIS Reprojection Tool) 下载及安装教程[通俗易懂]大家下载MODIS数据的时候,大多是hdf的格式数据。HDF数据包括11个波段的数据(如下图),假如想要其中一个波段数据,我们需要批量提取,这时就要用到NASA提供的MODISReprojectionTool,此工具虽不能实现全自动的批量提取,但是可以实现按月进行数据的提取及拼接,官网提供了Linux、macos、windows的版本,本文以windows环境为例,说明MRT软件的安装。…

    2022年5月29日
    49
  • 语义分割的定义_语义分割模型

    语义分割的定义_语义分割模型点击上方“AI算法修炼营”,选择加星标或“置顶”标题以下,全是干货引言语义分割结合了图像分类、目标检测和图像分割,通过一定的方法将图像分割成具有一定语义含义的区域块,并识别出每个区域块的…

    2022年8月21日
    4
  • Pytest(6)重复运行用例pytest-repeat「建议收藏」

    Pytest(6)重复运行用例pytest-repeat「建议收藏」前言平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来。自动化运行用例时候,也会出现偶然的bug,可以针对单个用例,

    2022年7月30日
    4
  • HADOOP生态圈简介

    HADOOP生态圈简介1.hadoop生态概况Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。具有可靠、高效、可伸缩的特点。Hadoop的核心是YARN,HDFS和Mapreduce下图是hadoop生态系统,集成spark生态圈。在未来一段时间内,hadoop将于spark共存,hadoop与s…

    2022年5月22日
    39

发表回复

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

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