CSV 表示 “Comma-Separated Values (逗号分隔的值) ” , CSV 文件是简化的电子表格,实际为纯文本文件。

一个 CSV 文件,格式是这样的:

因为 CSV 文件中的每个单元格都是以逗号分割,所以也许有人会对每行文本调用 split() 方法,来解析 CSV 文件。但 CSV 文件也有自己的转义字符,通过转义字符,允许逗号和其他字符作为值的一部分,但单纯使用 split() 方法不能处理这些转义字符。因为这些潜在的缺陷,所以建议总是使用 csv 模块来读写 CSV 文件。

csv 模块是 Python 自带的,所以可以直接导入。

1 Reader 对象

要使用 csv 模块从 CSV 文件中读取数据,我们需要创建一个 Reader 对象。 通过 Reader 对象,我们可以迭代遍历 CSV 文件中的每一行内容。

import osimport csv
import logging# logging.disable(logging.CRITICAL)
logging.basicConfig(level=logging.DEBUG, format='%(levelname)s - %(message)s')
'''
读取 CSV
@author Deniro Li
'''
os.chdir('F:/temp')file = open('CsvDataSource.csv')
reader = csv.reader(file)
data = list(reader)
logging.info('data -> %s', str(data))

运行结果:

INFO - data -> [['Dallas', '47', 'Janet Fuller', '445 Upland Pl.', 'Trial', ' ""', ' ""', ' "1996-07-22 00:00:00"'], ['Lyon', '38', 'Andrew Heiniger', '347 College Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"'], ['Dallas', '43', 'Susanne Smith', '2 Upland Pl.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"'], ['Berne', '22', 'Bill Ott', '250 - 20th Ave.', 'Active', ' "47.21"', ' "8.31"', ' "1996-07-22 00:00:00"'], ['Boston', '32', 'Michael Ott', '339 College Av.', 'Trial', ' "42.21"', ' "-71.5"', ' "1996-07-22 00:00:00"'], ['Dallas', '4', 'Sylvia Ringer', '365 College Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"'], ['Boston', '23', 'Julia Heiniger', '358 College Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"'], ['Chicago', '39', 'Mary Karsen', '202 College Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"'], ['Dallas', '40', 'Susanne Miller', '440 - 20th Ave.', 'Trial', ' ""', ' ""', ' "1996-07-22 00:00:00"'], ['Berne', '9', 'James Schneider', '277 Seventh Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"'], ['Dallas', '36', 'John Steel', '276 Upland Pl.', 'Suspended', ' ""', ' ""', ' "1996-07-22 00:00:00"'], ['Chicago', '35', 'George Karsen', '412 College Av.', 'Suspended', ' "41.50"', ' "-87.37"', ' "1996-07-22 00:00:00"'], ['Dallas', '37', 'Michael Clancy', '19 Seventh Av.', 'Deleted', ' ""', ' ""', ' "1996-07-22 00:00:00"'], ['Lyon', '2', 'Anne Miller', '20 Upland Pl.', 'Active', ' ""', ' "" ', ' "1996-07-22 00:00:00"'], ['Dallas', '0', 'Laura Steel', '429 Seventh Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"'], ['Lyon', '28', 'Susanne White', '74 - 20th Ave.', 'Deleted', ' ""', ' "" ', ' "1996-07-22 00:00:00"'], ['Paris', '5', 'Laura Miller', '294 Seventh Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"'], ['Lyon', '17', 'Laura Ott', '443 Seventh Av.', 'Active', ' "45.45"', ' "4.50" ', ' "1996-07-22 00:00:00"'], ['New York', '46', 'Andrew May', '172 Seventh Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"'], ['New York', '44', 'Sylvia Ott', '361 College Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"'], ['Dallas', '19', 'Susanne Heiniger', '86 - 20th Ave.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"'], ['Chicago', '11', 'Julia White', '412 Upland Pl.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"'], ['Dallas', '10', 'Anne Fuller', '135 Upland Pl.', 'Active', ' "32.46"', ' "-96.46"', ' "1996-07-22 00:00:00"'], ['New York', '41', 'Bill King', '546 College Av.', 'Deleted', ' "40.47"', ' "-73.58"', ' "1996-07-22 00:00:00"'], ['Oslo', '45', 'Janet May', '396 Seventh Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"'], ['Paris', '18', 'Sylvia Fuller', '158 - 20th Ave.', 'Trial', ' "48.48"', ' "2.20"', ' "1996-07-22 00:00:00"'], ['San Francisco', '48', 'Robert White', '549 Seventh Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"'], ['Paris', '25', 'Sylvia Steel', '269 College Av.', 'Suspended', ' ""', ' ""', ' "1996-07-22 00:00:00"'], ['San Francisco', '7', 'James Peterson', '231 Upland Pl.', 'Active', ' "37.47"', ' "-122.26"', ' "1996-12-12 00:00:00"'], ['Oslo', '42', 'Robert Ott', '503 Seventh Av.', 'Trial', ' "59.57"', ' "10.42"', ' "1996-09-09 00:00:00"']]

要用 csv 模块读取 CSV 文件,首先先使用 open() 函数打开它 ,就像打开任何其他文本文件一样。然后将它传递给 csv .reader() 函数。 这个函数将返回一个 Reader 对象。注意,csv .reader() 函数不接受文件名作为入参。

要访问 Reader 对象中的值,最直接的方法,就是利用 list() 将它转换成一个普通 Python 列表。它实际为一个包含列表的列表,用于表示二维数据。

我们还可以使用表达式 data [ row ][ col ] 来访问 CSV 中特定行和列的值。其中, row 是 data 中一个列表的下标, col 是该列表中,我们想访问的项的下标:

logging.info('data[0][0] -> %s', str(data[0][0]))
logging.info('data[2][3] -> %s', str(data[2][3]))
logging.info('data[5][2] -> %s', str(data[5][2]))

运行结果:

INFO - data[0][0] -> Dallas
INFO - data[2][3] -> 2 Upland Pl.
INFO - data[5][2] -> Sylvia Ringer

2 逐行读取

file = open('CsvDataSource.csv')
reader = csv.reader(file)
logging.debug('reader -> '+str(reader))
for row in reader:logging.info('Row #%d->  %s',reader.line_num, str(row))

运行结果:

DEBUG - reader -> <_csv.reader object at 0x0000000002716A08>
INFO - Row #1->  ['Dallas', '47', 'Janet Fuller', '445 Upland Pl.', 'Trial', ' ""', ' ""', ' "1996-07-22 00:00:00"']
INFO - Row #2->  ['Lyon', '38', 'Andrew Heiniger', '347 College Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"']
INFO - Row #3->  ['Dallas', '43', 'Susanne Smith', '2 Upland Pl.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"']
INFO - Row #4->  ['Berne', '22', 'Bill Ott', '250 - 20th Ave.', 'Active', ' "47.21"', ' "8.31"', ' "1996-07-22 00:00:00"']
INFO - Row #5->  ['Boston', '32', 'Michael Ott', '339 College Av.', 'Trial', ' "42.21"', ' "-71.5"', ' "1996-07-22 00:00:00"']
INFO - Row #6->  ['Dallas', '4', 'Sylvia Ringer', '365 College Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"']
INFO - Row #7->  ['Boston', '23', 'Julia Heiniger', '358 College Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"']
INFO - Row #8->  ['Chicago', '39', 'Mary Karsen', '202 College Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"']
INFO - Row #9->  ['Dallas', '40', 'Susanne Miller', '440 - 20th Ave.', 'Trial', ' ""', ' ""', ' "1996-07-22 00:00:00"']
INFO - Row #10->  ['Berne', '9', 'James Schneider', '277 Seventh Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"']
INFO - Row #11->  ['Dallas', '36', 'John Steel', '276 Upland Pl.', 'Suspended', ' ""', ' ""', ' "1996-07-22 00:00:00"']
INFO - Row #12->  ['Chicago', '35', 'George Karsen', '412 College Av.', 'Suspended', ' "41.50"', ' "-87.37"', ' "1996-07-22 00:00:00"']
INFO - Row #13->  ['Dallas', '37', 'Michael Clancy', '19 Seventh Av.', 'Deleted', ' ""', ' ""', ' "1996-07-22 00:00:00"']
INFO - Row #14->  ['Lyon', '2', 'Anne Miller', '20 Upland Pl.', 'Active', ' ""', ' "" ', ' "1996-07-22 00:00:00"']
INFO - Row #15->  ['Dallas', '0', 'Laura Steel', '429 Seventh Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"']
INFO - Row #16->  ['Lyon', '28', 'Susanne White', '74 - 20th Ave.', 'Deleted', ' ""', ' "" ', ' "1996-07-22 00:00:00"']
INFO - Row #17->  ['Paris', '5', 'Laura Miller', '294 Seventh Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"']
INFO - Row #18->  ['Lyon', '17', 'Laura Ott', '443 Seventh Av.', 'Active', ' "45.45"', ' "4.50" ', ' "1996-07-22 00:00:00"']
INFO - Row #19->  ['New York', '46', 'Andrew May', '172 Seventh Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"']
INFO - Row #20->  ['New York', '44', 'Sylvia Ott', '361 College Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"']
INFO - Row #21->  ['Dallas', '19', 'Susanne Heiniger', '86 - 20th Ave.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"']
INFO - Row #22->  ['Chicago', '11', 'Julia White', '412 Upland Pl.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"']
INFO - Row #23->  ['Dallas', '10', 'Anne Fuller', '135 Upland Pl.', 'Active', ' "32.46"', ' "-96.46"', ' "1996-07-22 00:00:00"']
INFO - Row #24->  ['New York', '41', 'Bill King', '546 College Av.', 'Deleted', ' "40.47"', ' "-73.58"', ' "1996-07-22 00:00:00"']
INFO - Row #25->  ['Oslo', '45', 'Janet May', '396 Seventh Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"']
INFO - Row #26->  ['Paris', '18', 'Sylvia Fuller', '158 - 20th Ave.', 'Trial', ' "48.48"', ' "2.20"', ' "1996-07-22 00:00:00"']
INFO - Row #27->  ['San Francisco', '48', 'Robert White', '549 Seventh Av.', 'Active', ' ""', ' ""', ' "1996-07-22 00:00:00"']
INFO - Row #28->  ['Paris', '25', 'Sylvia Steel', '269 College Av.', 'Suspended', ' ""', ' ""', ' "1996-07-22 00:00:00"']
INFO - Row #29->  ['San Francisco', '7', 'James Peterson', '231 Upland Pl.', 'Active', ' "37.47"', ' "-122.26"', ' "1996-12-12 00:00:00"']
INFO - Row #30->  ['Oslo', '42', 'Robert Ott', '503 Seventh Av.', 'Trial', ' "59.57"', ' "10.42"', ' "1996-09-09 00:00:00"']

3 Writer 对象

Writer 对象可以让我们把数据写入 CSV 文件。

import csv
import os'''
写入 csv
@author Deniro Li
'''os.chdir('F:/temp')output_file = open('output.csv', 'w', newline='')
output_writer = csv.writer(output_file)
output_writer.writerow(['网页', '咨询', '视频'])
output_writer.writerow(['图片', '知道', '文库'])
output_file.close()

运行结果:

  1. 首先调用 open()并传入’w’,以写模式打开一个新文件;
  2. 然后使用 csv.writer() 函数,创建一个 Writer 对象;
  3. 接着写入数据;
  4. 最后关闭这个文件。

在 Windows 上,需要为 open() 函数的 newline 关键字参数传入一个空字符串。如果没有设置 newline 参数, output.csv 中的行距将变为两倍,如下图所示。

如果写入的内容包含逗号,那么 csv 模块会自动加上双引号,对其进行转义,如下例所示。

output_writer.writerow(['贴吧,采购', '知道', '文库'])

运行结果:

4 delimiter 和 lineterminator

我们也可以利用 delimiter ,来制作 TSV 文件,TSV 是Tab-separated values的缩写,即以制表符作为分隔符的文件;利用 lineterminator 参数来设定行距。

tsv_file = open('output.tsv', 'w', newline='')
output_writer = csv.writer(tsv_file, delimiter='\t', lineterminator='\n\n\n')
output_writer.writerow(['网页', '咨询', '视频'])
output_writer.writerow(['图片', '知道', '文库'])
output_writer.writerow(['贴吧,采购', '知道', '文库'])
tsv_file.close()

运行结果:

这里利用 lineterminator=’\n\n\n’ 将行与行之间的字符变为三个换行符,效果就是实现了 3 倍行距。

说说如何利用 Python 处理 CSV 文件相关推荐

  1. [转载] 利用python对csv文件进行简单的数据分析

    参考链接: Python中的探索性数据分析 利用python对csv文件进行简单的数据分析 在通过爬虫爬取数据后,将数据放到csv文件里,为了方便观察,可以对数据进行简单的分析.下面我将对爬取的51j ...

  2. python计算csv列平均值_利用Python读取CSV文件并计算某一列的均值和方差

    近日需要对excel的csv文件进行处理,求取某银行历年股价的均值方差等一系列数据 文件的构成很简单,部分如下所示 总共有接近七千行数据,主要的工作就是将其中的股价数据提取出来,放入一个数组之中,然后 ...

  3. python读取csv求平均数_利用Python读取CSV文件并计算某一列的均值和方差

    近日需要对excel的csv文件进行处理,求取某银行历年股价的均值方差等一系列数据 文件的构成很简单,部分如下所示 总共有接近七千行数据,主要的工作就是将其中的股价数据提取出来,放入一个数组之中,然后 ...

  4. 利用python读取csv文件中url并下载

    这是天池竞赛中数据集下载的csv文件,在这里当然也可以用wget在linux中进行下载,但这样感觉不太cool. 写了个python程序,文件夹栏 import pandas as pd import ...

  5. 利用Python将csv文件按照某列分成小csv

    需求:网上下载的csv文件,包含的几十万的数据,想要根据MMSI的值分为不同的csv文件 主要步骤: read_csv:读取存放所有数据的csv文件 drop_duplicates:去掉重复的数据(默 ...

  6. python对csv文件中的数据进行分类_利用Python对csv文件中的数据进行排序

    代码如下: #导入包 import pandas as pd from pandas import DataFrame,Series #设置路径 path='C:\\Users\\jyjh\\Desk ...

  7. 技术图文:C# VS. Python 读取CSV文件指南

    背景 CSV 是一种以逗号进行特征分隔的文本文件类型,在数据库或电子表格中是一种非常常见的导入导出格式.本篇图文就以泰坦尼克号船员获救预测( Kaggle)中使用的数据集为例来说明 C#.Python ...

  8. python写入csv文件的几种方法

    python写入csv文件的几种方法 最常用的一种方法,利用pandas包 import pandas as pd #任意的多组列表 a = [1,2,3] b = [4,5,6] #字典中的key值 ...

  9. python导入csv文件-Python从CSV文件导入数据和生成简单图表

    原标题:Python从CSV文件导入数据和生成简单图表 我们已经完成Python的基础环境搭建工作,现在我们尝试导入CSV数据 我们准备一个csv测试数据,文件名是csv-test-data.csv数 ...

最新文章

  1. ios中tableview网封装(viewcontroller封装)常用的
  2. html页脚行距,html Word行距怎么设置
  3. 打破冷漠僵局文章_保持冷静并打破僵局-最佳
  4. 前端学习(635):字符串拼接
  5. 论文绘图神器来了:哈佛博士后开源一行代码绘制不同期刊格式图表
  6. classpath目录
  7. [Asp.net]Uploadify上传大文件,Http error 404 解决方案 - wolfy
  8. PostgreSQL视图和物化视图
  9. 只用html如何实现音乐播放,如何使用html实现音乐播放
  10. 17-7PH不锈钢(SUS 631)用于哪些领域
  11. php网页怎么设置背景图片大全唯美,html文档中怎么把图片作为背景?
  12. 最全的盲埋孔板工艺介绍与设计原则​​​​​​​
  13. MATLAB数字图像处理练习六
  14. nodejs:underscore模块介绍
  15. 华为发布5G“天罡”“巴龙5000”芯片 5G折叠屏手机2月发布
  16. Oracle 中的 ST_Geometry
  17. 美团单车崛起,摩拜渐成往事
  18. EasyCVR前端控制台打印报错“[Vue warn]:Invalid”的解决办法
  19. 内核与驱动_08_键盘驱动原理及代码
  20. 欢迎加入微信交流群交流

热门文章

  1. VCAP6.5-DCV Design Prep-Guide
  2. 怎样把ul li 前面的点去掉
  3. tcp_tw_recycle导致NAT网络TCP连接失败
  4. Linux使用命令启用配额管理,Linux常用命令(九)磁盘配额管理
  5. 两台电脑在同一局域网下不能ping通
  6. 代码随想录打卡第二天
  7. 外设capsense的简单调用
  8. AltiumDesigner20画图不求人1 | 软件安装方法
  9. 干涩皮肤的解渴神器,水肌美玻尿酸补水保湿面膜
  10. linux下串口设备