dir(…)可以用来查看该变量支持的方法
#csv
##1.打开csv文件
import csv
csvfile = open('data-txt','r')
##2.查看csv文件内容(不打印)
列表:csv.reader(csvfile)
字典:csv.DictReader(csvfile)
#JSON
##1.打开并查看json文件
json_data = open('../data/chp3/data-text.json').read()
*ps: 与csv不同,此处需添加 .read()
*
否则会报错: TypeError: the JSON object must be str, not 'TextIOWrapper'
原因:json库和csv处理数据的方式不同 json.loads()
只能接受str,而csv.reader()只能接受文件对象
##2.载入json文件
json.loads(json_data)
#xml
##1.导入xml数据
from xml.etree import ElementTree as et
tree = et.parse('../data/chp3/data-text.xml')
root = tree.getroot()#调用树的根元素(XML节点)
data = root.find('Data')
all_data = []#list,用来存放record字典的内容
for oberservation in data:
record = {}#dictioary,用来保存每一个键值对
for item in oberservation:
lookup_str = list(item .attrib.keys())#将键值对这个数组传给lookup_str
lookup_key = lookup_str[0]#将该键值对的第一个元素作为新字典record的键rec_key
if lookup_key == 'Numeric':
rec_key = 'Numeric'#若为数字,则将键名改为Numeric(不处理的话键名是数字)
rec_value = item.attrib['Numeric']#将数字赋为它的键值
else:
rec_key = item.attrib[lookup_key]
rec_value = item.attrib['Code']
record[rec_key] = rec_value#将每一个新的键值对添加到record字典中
all_data.append(record)#将字典添加到列表中
print(all_data)
如下图,所有显示的内容是一个all_data[]列表
PS:item.text只有在标签内有内容才有用,否则返回的数值均为None
##2.find() 和 findall()
当我使用find()时,print的是所有元素,而使用findall()却只print了一个元素,这是为什么呢?
data = root.find('Data')
# data = root.findall('Data')
print(list(data))
这是find()的运行结果
这是findall()的运行结果
这两者不是反了吗这样?求指教
#Excel
下面的代码是一步步进行的,只是因为不想新建多个文件所以直接将每一步的上一步注释掉了
PS: pprint
用于美化输出的内容
读取excel文件需要 import xlrd
,若是写,则要 import xlwt
import xlrd
import pprint
book = xlrd.open_workbook('../data/chp4/SOWC 2014 Stat Tables_Table 9.xlsx')
# for sheet in book.sheets():
# print(sheet.name)
sheet = book.sheet_by_name('Table 9 ')
# print (dir(sheet))
# print(sheet.nrows)#303行
# 使用range函数将303转换成一个列表,使用for遍历(一行为列表的一个元素)
# # 输出单元格内容
# # 法1:使用for循环嵌套
# for i in range(sheet.nrows):
# # print(i)
# # print(sheet.row_values(i))#输出每一行的值,空格内无数据则输出为`''`
# row = sheet.row_values(i)
# for cell in row:
# print(cell)
# 输出单元格内容
# 法2:使用计数器
# count = 0
# for i in range(sheet.nrows):
# if count < 20:
# if i > 14:
# row = sheet.row_values(i)
# print(i, row)
# count += 1
# 创建字典,国家名为键
# count = 0
# data = {}
# for i in range(sheet.nrows):
# if count < 20:
# if i > 14:
# row = sheet.row_values(i)
# country = row[1]
# data[country] = {}
# # print(i, row)
# count += 1
# print(data)
# 删除与计数器相关的代码
data = {}
# py3将xrange和range 合并为range
for i in range(14,sheet.nrows):
row = sheet.row_values(i)
country = row[1]
data[country] = {
'child_labor':{
'total':[row[4],row[5]],
'male':[row[6],row[7]],
'female':[row[8],row[9]],
},
'child_marriage':{
'marriaged_by_15':[row[10],row[11]],
'married_by_18':[row[12],row[13]],
}
}
# 可以加判断语句以退出for循环
# if country == 'Afghanistan':
# print('break')
# break
# else:
# print(country)
pprint.pprint(data['Albania'])