python学习19

CSV读写

CSV(Comma-Separated Values)即逗号分隔值,可以用Excel打开查看。由于是纯文本,任何编辑器也都可打开。与Excel文件不同,CSV文件中:

  • 值没有类型,所有值都是字符串
  • 不能指定字体颜色等样式
  • 不能指定单元格的宽高,不能合并单元格
  • 没有多个工作表
  • 不能嵌入图像图表

在CSV文件中,以,作为分隔符,分隔两个单元格。像这样a,,c表示单元格a和单元格c之间有个空白的单元格。依此类推。

举个列子,如下表格:


可以存储为CSV文件,文件内容是:

No.,Name,Age,Score
1,mayi,18,99
2,jack,21,89
3,tom,25,95
4,rain,19,80

上述CSV文件保存为text.csv

1.读文件

为了读取CSV文件,我们需要使用python自带的CSV模块。有两种方法可以使用。

扫描二维码关注公众号,回复: 1741385 查看本文章

第一种方法使用reader函数,接收一个可迭代的对象(比如csv文件),能返回一个生成器,就可以从其中解析出csv的内容:比如下面的代码可以读取csv的全部内容,以行为单位:

#usr/bin/python
#-*-coding:utf-8-*-

import csv

with open('text.csv','r',encoding='utf-8') as f:
    reader=csv.reader(f)
    rows=[row for row in reader]

print(rows)

得到:

[['No.', 'Name', 'Age', 'Score'],
 ['1', 'mayi', '18', '99'],
 ['2', 'jack', '21', '89'],
 ['3', 'tom', '25', '95'],
 ['4', 'rain', '19', '80']]

如果只想提取某一列,我们可以这样做,将上述读取CSV代码中:

rows=[row for row in reader]
#读取第二列
rows=[row[1] for row in reader

这样得到的就是第二列。

注意从csv读出的都是str类型。这种方法要事先知道列的序号,比如Name在第2列,而不能根据'Name'这个标题查询。这时可以采用第二种方法。

第二种方法是使用DictReader,和reader函数类似,接收一个可迭代的对象,能返回一个生成器,但是返回的每一个单元格都放在一个字典的值内,而这个字典的键则是这个单元格的标题(即列头)。用下面的代码可以看到DictReader的结构:

#usr/bin/python
#-*-coding:utf-8-*-

import csv

with open('text.csv','r',encoding='utf-8') as f:
    reader_1=csv.DictReader(f)
    row_1=[row for row in reader_1]

print(row_1)

得到:

[{'No.': '1', 'Age': '18', 'Score': '99', 'Name': 'mayi'},
 {'No.': '2', 'Age': '21', 'Score': '89', 'Name': 'jack'},
 {'No.': '3', 'Age': '25', 'Score': '95', 'Name': 'tom'},
 {'No.': '4', 'Age': '19', 'Score': '80', 'Name': 'rain'}]

如果我们想用DictReader读取csv的某一列,就可以用列的标题查询,即在上述代码中:

row_1=[row for row in reader_1]
改为:
row_1=[row['Name'] for row in reader_1]

即可得到:

['mayi', 'jack', 'tom', 'rain']

2.写文件

读文件时,我们把csv文件读入列表中,写文件时会把列表中的元素写入到csv文件中。

#usr/bin/python
#-*-coding:utf-8-*-
import csv

with open('text.csv','a',encoding='utf-8',newline = "") as f:

    csv_writer = csv.writer(f)
    row = ['5','hanmeimei','23','81']
    csv_writer.writerow(row)
    f.close()

上述代码需要注意的点有:newline='',如果不加这个,在写入内容时会造成行错误,上述代码输出结果为:


猜你喜欢

转载自blog.csdn.net/gy_334/article/details/80518581
今日推荐