Python编程快速上手14章处理 CSV 文件和 JSON 数据(上下)

csv 模块
CSV 文件中的每行代表电子表格中的一行,逗号分割了该行中的单元格。

#example.xlsx
4/5/2015 13:34,Apples,73
4/5/2015 3:41,Cherries,85
4/6/2015 12:46,Pears,14
4/8/2015 8:59,Oranges,52
4/10/2015 2:07,Apples,152
4/10/2015 18:10,Bananas,23
4/10/2015 2:40,Strawberries,98
  • Reader 对象
    要用 csv 模块从 CSV 文件中读取数据,需要创建一个 Reader 对象。Reader 对
    象让你迭代遍历 CSV 文件中的每一行。
import csv
exampleFile = open('example.csv')
exampleReader = csv.reader(exampleFile)
exampleData = list(exampleReader)
#返回 Reader 对象列表,要变成列表要用list
exampleData

既然已经将 CSV 文件表示为列表的列表,就可以用表达式 exampleData[row][col]来访问特定行和列的值。

>>> exampleData[0][0]
'4/5/2015 13:34'
>>> exampleData[0][1]
'Apples'
>>> exampleData[0][2]
'73'
>>> exampleData[1][1]
'Cherries'
>>> exampleData[6][1]
'Strawberries'
  • 在 for 循环中,从 Reader 对象读取数据
import csv
exampleFile = open('example.csv')
exampleReader = csv.reader(exampleFile)
for row in exampleReader:
	print('Row #' + str(exampleReader.line_num) + ' ' + str(row))
	# line_num 变量,它包含了当前行的编号。	
	#Reader 对象只能循环遍历一次。要再次读取 CSV 文件,必须调用 csv.reader,创建一个对象
  • Writer 对象
    Writer 对象让你将数据写入 CSV 文件。要创建一个 Writer 对象,就使用csv.writer()函数。
import csv
#如果忘记设置 newline 关键字参数,行距将有两倍
outputFile = open('output.csv', 'w', newline='')
outputWriter = csv.writer(outputFile)
#Writer 对象的 writerow()方法接受一个列表参数。列表中的每个词,放在输出的
#CSV 文件中的一个单元格中。writerow()函数的返回值,是写入文件中这一行的字
#符数(包括换行字符)。
outputWriter.writerow(['Hello, world', 'bacon', 'ham'])
#Writer 对象自动转义了'Hello, world!'中的逗号,在 CSV 文件中使用了双引号。
outputFile.close()
  • delimiter 和 lineterminator 关键字参数
    假定你希望用制表符代替逗号来分隔单元格,并希望有两倍行距。
import csv
csvFile = open('example.tsv', 'w', newline='')
csvWriter = csv.writer(csvFile, delimiter='\t', lineterminator='\n\n')
#‘/t’以文本格式打开的效果
csvWriter.writerow(['apples', 'oranges', 'grapes'])
csvFile.close()

项目:从 CSV 文件中删除表头
打开当前工作目录中所有扩展名为.csv 的文件,读取 CSV 文件的内
容,并除掉第一行的内容重新写入同名的文件。这将用新的、无表头的内容替换
CSV 文件的旧内容。

import csv,os
dir = os.getcwd()
print(dir)
os.makedirs(os.path.join(dir,'removeCsvHeaderFile'),exist_ok=True)
for filename in os.listdir(dir):
    if not filename.endswith('.csv'):
        continue
    print(filename)
    #读出row
    csvFile = open(os.path.join(dir,filename))
    csvReader = csv.reader(csvFile)
    #写入row
    outputFile = open(os.path.join(dir,'removeCsvHeaderFile',filename),'w',newline='')
    csvWriter = csv.writer(outputFile)
    for row in csvReader:
        if csvReader.line_num == 1:
            continue
        csvWriter.writerow(row)
    csvFile.close()
    outputFile.close()

JSON 和 API
JavaScript 对象表示法是一种流行的方式,将数据格式化,成为人可读的字符
串。JSON 是JavaScript 程序编写数据结构的原生方式,通常类似于 Python 的 pprint()
函数产生的结果。不需要了解 JavaScript,也能处理 JSON 格式的数据。

# JSON 格式数据的一个例子:
{"name": "Zophie", "isCat": true,
"miceCaught": 0, "napsTaken": 37.5,
"felineIQ": null}

了解 JSON 是很有用,因为很多网站都提供 JSON 格式的内容,作为程序与网
站交互的方式。这就是所谓的提供“应用程序编程接口(API)”。访问 API 和通过
URL 访问任何其他网页是一样的。
json 模块

  • 用 loads()函数读取 JSON
    要将包含 JSON 数据的字符串转换为Python 的值,就将它传递给 json.loads()函数。
>>> stringOfJsonData = '{"name": "Zophie", "isCat": true, "miceCaught": 0,
"felineIQ": null}'
>>> import json
>>> jsonDataAsPythonValue = json.loads(stringOfJsonData)
>>> jsonDataAsPythonValue
{'isCat': True, 'miceCaught': 0, 'name': 'Zophie', 'felineIQ': None}
  • 用 dumps 函数写出 JSON
    json.dumps()函数将一个 Python 值转换成 JSON 格式的数据字符串。
>>> pythonValue = {'isCat': True, 'miceCaught': 0, 'name': 'Zophie',
'felineIQ': None}
>>> import json
>>> stringOfJsonData = json.dumps(pythonValue)
>>> stringOfJsonData
'{"isCat": true, "felineIQ": null, "miceCaught": 0, "name": "Zophie" }'

该值只能是以下基本 Python 数据类型之一:字典、列表、整型、浮点型、字符
串、布尔型或 None。

课后练习
Excel 到 CSV 的转换程序
Excel 可以将电子表格保存为CSV 文件,只要点几下鼠标,但如果有几百个Excel文件要转换为 CSV,就需要点击几小时。利用第 12 章的 openpyxl 模块,编程读取当前工作目录中的所有 Excel 文件,并输出为 CSV 文件。

import openpyxl,csv,os
dirObj = os.getcwd()
for filename in os.listdir(dirObj):
    if not filename.endswith('.xlsx'):#选出excel文件
        continue
    #创建load_workbook对象,读取行
    wb = openpyxl.load_workbook(os.path.join(dirObj,filename),'rb')
    sheet = wb.active
    #创建csvwriter对象,写入行
    filename = filename.split('.')[0] + '.csv'
    csvFile = open(os.path.join(dirObj,'output',filename),'w',newline='')
    csvWriter = csv.writer(csvFile)
    #开始写入行
    for row in sheet.rows:
        rowList = []
        for cell in row:
            rowList.append(str(cell.value))
        print(rowList)
        csvWriter.writerow(rowList)
    csvFile.close()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值