第16章:处理CSV文件和JOSN数据(笔记)

16.1:CSV模块

CSV和Excel相比:

  • 值没有类型,所有东西都是字符串
  • 没有字体大小和颜色设置
  • 没有多个工作表
  • 不能指定单元格的宽度和高度
  • 不能合并单元格
  • 不能嵌入图像或图表

 CSV文件的优势就是简单,被多种程序广泛支持,可以在文本编辑器中查看,它是表示电子表格数据的直接方式。

16.1.1:reader对象

import csv

exampleFile = open('example.csv')
exampleReader = csv.reader(exampleFile)
print(list(exampleReader))

要用CSV模块从CSV文件中读取数据,需要一个reader对象。

reader对象可以让你迭代遍历CSV文件中的每一行

不能将文件名的字符串传递给csv.reader函数。

16.1.2:在for循环中,从reader对象读取数据

import csv

exampleFile = open('example.csv')
exampleReader = csv.reader(exampleFile)
for row in exampleReader:
    print('Row #' + str(exampleReader.line_num) + ' ' + str(row))

reader对象的line_num属性可以获取当前行的编号

16.1.3:writer对象

import csv

outputFile = open('output.csv', 'w', newline='')
outputWriter = csv.writer(outputFile)
outputWriter.writerow(['spam', 'eggs'])
outputWriter.writerow(['hello,word', 'eggs'])
outputFile.close()

要用CSV模块从CSV文件中写入数据,需要一个writer对象,并且文件要以写的方式打开。

writerrow()函数接收一个参数列表,列表中的每个词放在CSV文件中的一个单元格中,函数返回的是写入文件的这一行的字符数。

16.1.4:delimiter和lineterminator关键字参数

import csv

csvFile = open('example.tsv', 'w', newline='')
outputWriter = csv.writer(csvFile, delimiter='\t', lineterminator='\n\n')
outputWriter.writerow(['spam', 'eggs'])
outputWriter.writerow(['hello,word', 'eggs'])
csvFile.close()

delimiter参数:设置字符之间的制表符。

lineterminator参数:设置行之间的字符

16.1.5:DictReader和DictWriter

import csv

exampleFile = open('example.csv')
exampleDictReader = csv.DictReader(exampleFile, ['time', 'name', 'amount'])
for row in exampleDictReader:
    print(row['time'], row['name'], row['amount'])

DictReader对象使用字典方式进行读文件将默认csv文件的第一行作为字典的键,如果csv文件没有标题,也可以自行创建标题

import csv

outputFile = open('output.csv', 'w', newline='')
outputDictWriter = csv.DictWriter(outputFile, ['time', 'name', 'amount'])
outputDictWriter.writeheader()
outputDictWriter.writerow({'time': 'spam', 'name': 'eggs', 'amount': '555'})
outputDictWriter.writerow({'time': 'bus', 'name': 'tea', 'amount': '666'})
outputFile.close()

DictWriter对象使用字典方式进行写文件,传入一个字典作为标题使用的键

writerheader()方法:如果想让文件包含标题,就调用这个方法

16.2:项目:从csv文件中删除标题行

import csv, os

os.makedirs('headerRemoved', exist_ok=True)

for csvFilename in os.listdir('.'):
    if not csvFilename.endswith('.csv'):
        continue
    
    print(csvFilename)
    
    csvRows = []
    csvFileObj = open(csvFilename)
    readerObj = csv.reader(csvFileObj)
    for row in readerObj:
        if readerObj.line_num == 1:
            continue
        csvRows.append(row)
    csvFileObj.close()
    
    csvFileObj = open(os.path.join('headerRemoved', csvFilename), 'w', newline='')
    csvWriter = csv.writer(csvFileObj)
    for row in csvRows:
        csvWriter.writerow(row)
    csvFileObj.close()

16.3:JSON和API

16.4:json模块

json不能存储每一种python值,它只能包含:字符串、整型、浮点型、布尔型、列表、字典和NoneType。JSON不能表示python特有的对象。

16.4.1:用loads()函数读取JSON

stringOfJsonData = '{"name": "Zophie", "isCat": true, "miceCaught": 0, "felineIQ": null}'

import json

jsonDataAsPythonValue = json.loads(stringOfJsonData)
print(jsonDataAsPythonValue)

要将包含JSON数据的字符串转换为python的值,就要将它传递给loads()函数

16.4.2:用dumps函数写出JSON

pythonVallue = {'isCat': True, 'miceCaught': 0, 'name': 'Zophie', 'felinIQ': None}
import json

stringOfJsonData = json.dumps(pythonVallue)
print(stringOfJsonData)

dumps()函数将一个python值转换成JSON格式的数据字符串,该值只能是:字典、列表、整型、浮点型、字符串、布尔型或None。

16.5:项目:取得当前的天气数据

import json, requests, sys

APPID = 'YOUR_APPID_HERE'

if len(sys.argv) < 2:
    print('Usage: getOpenWeather.py city_name, 2-letter_country_code')
    sys.exit()
location = ' '.join(sys.argv[1:])

url = 'http://aip.op***data?q=%scnt=3&APPID=%s' % (location, APPID)     
# 由于书上也是用***表示,所有需要自己找网站
requests = requests.get(url)
requests.raise_for_status()
print(requests.text)

weatherData = json.loads(requests.text)
w = weatherData['list']
print('Current weather in %s' % (location))
print(w[0]['weather'][0]['main'], '-', w[1]['weather'][0]['description'])
print()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值