目录
CSV文件处理
CSV文件:以逗号为分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。
读取CSV文件
以列表形式读取
1、csv.reader()函数:将csv文件每一行信息作为列表返回。
import csv #导入csv模块
def csv_read():
with open('product.csv',encoding='utf-8') as f:
reader = csv.reader(f)
header = next(reader) #文件可迭代,首先将表头提出,指针指向下一行
print(header)
for row in reader:
print(row)
if __name__ == '__main__':
csv_read()
#运行结果
['产品ID', '产品名称', '单价', '库存']
['1', '苹果汁', '18', '39']
['2', '牛奶', '22.7', '17']
['3', '番茄酱', '10', '13']
['4', '盐巴', '22', '53']
['5', '麻油', '21.35', '0']
['6', '酱油', '25', '120']
['7', '海鲜粉', '30', '15']
['8', '胡椒粉', '40', '6']
['9', '赞油鸡', '97', '29']
['10', '大甲蟹', '31', '31']
2、其中的信息可以按照列表进行检索。
import csv
def csv_read():
with open('product.csv',encoding='utf-8') as f:
reader = csv.reader(f)
header = next(reader)
print(header)
for row in reader:
print(f'编号:{row[0]}\t产品:{row[1]}\t单价:{row[2]}')
if __name__ == '__main__':
csv_read()
#运行结果
['产品ID', '产品名称', '单价', '库存']
编号:1 产品:苹果汁 单价:18
编号:2 产品:牛奶 单价:22.7
编号:3 产品:番茄酱 单价:10
编号:4 产品:盐巴 单价:22
编号:5 产品:麻油 单价:21.35
编号:6 产品:酱油 单价:25
编号:7 产品:海鲜粉 单价:30
编号:8 产品:胡椒粉 单价:40
编号:9 产品:赞油鸡 单价:97
编号:10 产品:大甲蟹 单价:31
以命名元组形式读取
import csv
from collections import namedtuple
csv_read_by_namedtuple():
with open('product.csv',encoding='utf-8') as f:
reader = csv.reader(f)
headers = next(reader)
Row = namedtuple('Row',headers)
for r in reader:
row = Row(*r)
print(row)
if __name__ == '__main__':
csv_read_by_namedtuple()
#运行结果
Row(产品ID='1', 产品名称='苹果汁', 单价='18', 库存='39')
Row(产品ID='2', 产品名称='牛奶', 单价='22.7', 库存='17')
Row(产品ID='3', 产品名称='番茄酱', 单价='10', 库存='13')
Row(产品ID='4', 产品名称='盐巴', 单价='22', 库存='53')
Row(产品ID='5', 产品名称='麻油', 单价='21.35', 库存='0')
Row(产品ID='6', 产品名称='酱油', 单价='25', 库存='120')
Row(产品ID='7', 产品名称='海鲜粉', 单价='30', 库存='15')
Row(产品ID='8', 产品名称='胡椒粉', 单价='40', 库存='6')
Row(产品ID='9', 产品名称='赞油鸡', 单价='97', 库存='29')
Row(产品ID='10', 产品名称='大甲蟹', 单价='31', 库存='31')
可以像使用类实例一样打印出需要的信息。
import csv
from collections import namedtuple
csv_read_by_namedtuple():
with open('product.csv',encoding='utf-8') as f:
reader = csv.reader(f)
headers = next(reader)
Row = namedtuple('Row',headers)
for r in reader:
row = Row(*r)
print(f'{row.产品ID} -> {row.产品名称} -> {row.单价}')
if __name__ == '__main__':
csv_read_by_namedtuple()
#运行结果
1 -> 苹果汁 -> 18
2 -> 牛奶 -> 22.7
3 -> 番茄酱 -> 10
4 -> 盐巴 -> 22
5 -> 麻油 -> 21.35
6 -> 酱油 -> 25
7 -> 海鲜粉 -> 30
8 -> 胡椒粉 -> 40
9 -> 赞油鸡 -> 97
10 -> 大甲蟹 -> 31
以字典形式读取
import csv
def csv_read_by_dict():
with open('product.csv',encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
print(row)
if __name__ == '__main__':
csv_read_by_dict()
#运行结果
OrderedDict([('产品ID', '1'), ('产品名称', '苹果汁'), ('单价', '18'), ('库存', '39')])
OrderedDict([('产品ID', '2'), ('产品名称', '牛奶'), ('单价', '22.7'), ('库存', '17')])
OrderedDict([('产品ID', '3'), ('产品名称', '番茄酱'), ('单价', '10'), ('库存', '13')])
OrderedDict([('产品ID', '4'), ('产品名称', '盐巴'), ('单价', '22'), ('库存', '53')])
OrderedDict([('产品ID', '5'), ('产品名称', '麻油'), ('单价', '21.35'), ('库存', '0')])
OrderedDict([('产品ID', '6'), ('产品名称', '酱油'), ('单价', '25'), ('库存', '120')])
OrderedDict([('产品ID', '7'), ('产品名称', '海鲜粉'), ('单价', '30'), ('库存', '15')])
OrderedDict([('产品ID', '8'), ('产品名称', '胡椒粉'), ('单价', '40'), ('库存', '6')])
OrderedDict([('产品ID', '9'), ('产品名称', '赞油鸡'), ('单价', '97'), ('库存', '29')])
OrderedDict([('产品ID', '10'), ('产品名称', '大甲蟹'), ('单价', '31'), ('库存', '31')])
获取指定信息
import csv
def csv_read_by_dict():
with open('product.csv',encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
print('{} -> {} -> {}'.format(row['产品ID'],row['产品名称'],row['单价']))
if __name__ == '__main__':
csv_read_by_dict()
#运行结果
1 -> 苹果汁 -> 18
2 -> 牛奶 -> 22.7
3 -> 番茄酱 -> 10
4 -> 盐巴 -> 22
5 -> 麻油 -> 21.35
6 -> 酱油 -> 25
7 -> 海鲜粉 -> 30
8 -> 胡椒粉 -> 40
9 -> 赞油鸡 -> 97
10 -> 大甲蟹 -> 31
写入CSV文件
元组写入CSV文件
import csv
def csv_write():
headers = ["编号","课程","讲师"]
rows = [
(1,"Python","Tom"),
(2, "C#", "Tom"),
(3, "Django", "Tom"),
(4, ".NET", "Tom")
]
with open('my_course.csv','w',encoding='utf-8',newline='') as f:
writer = csv.writer(f)
writer.writerow(headers)
writer.writerows(rows)
if __name__ == '__main__':
csv_write()
运行结果
字典表写入CSV文件
import csv
def csv_write_dict():
headers = ["编号","课程","讲师"]
rows = [
{"编号": 1, "课程": "Python", "讲师": "Tom"},
{"编号": 2, "课程": "C#", "讲师": "Tom"},
dict(编号=3,课程="Django",讲师="Tom"),
dict(编号=4, 课程=".NET", 讲师="Tom")
]
with open('my_course.csv','w',encoding='utf-8',newline='') as f:
writer = csv.DictWriter(f, headers)
writer.writeheader()
writer.writerows(rows)
if __name__ == '__main__':
csv_write_dict()
运行结果
json文件处理
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,因此是一种理想的数据交换语言。
dump()和dumps()函数对python对象进行序列化,将一个Python对象进行JSON格式的编码。dumps()表示将python对象转化为json字符串。
load()和loads()函数为反序列化方法,将json格式数据解码为python对象。
python字典表与json字符串的转化
import json
def json_basic():
data = {
"编号": 1,
"课程": "Python",
"讲师": "Tom"
}
print('原始数据')
print(data)
print('-' * 20)
json_str = json.dumps(data)
print('json字符串')
print(json_str)
print('-' * 20)
json_data = json.loads(json_str)
print('读取json数据')
print(json_data)
if __name__ == '__main__':
json_basic()
#运行结果
原始数据
{'编号': 1, '课程': 'Python', '讲师': 'Tom'}
--------------------
json字符串
{"\u7f16\u53f7": 1, "\u8bfe\u7a0b": "Python", "\u8bb2\u5e08": "Tom"}
--------------------
读取json数据
{'编号': 1, '课程': 'Python', '讲师': 'Tom'}
写入json文档
dump()和dumps()函数对python对象进行序列化。将一个Python对象进行JSON格式的编码。
import json
def json_writer_file():
data = {
"编号": 1,
"课程": "Python",
"讲师": "Tom"
}
with open('data.json','w',encoding='utf8') as f:
json.dump(data, f)
if __name__ == '__main__':
json_writer_file()
运行结果
读取json文档
import json
def json_read_file():
with open('data.json','r',encoding='utf8') as f:
data = json.load(f)
print(data)
if __name__ == '__main__':
json_read_file()
#运行结果
{'编号': 1, '课程': 'Python', '讲师': 'Tom'}
json与python的类型差异
json中true、false、null与python中写法不一样。
import json
def json_type_diff():
print(json.dumps(True))
print(json.dumps(False))
print(json.dumps(None))
if __name__ == '__main__':
json_type_diff()
#运行结果
true
false
null
Excel文件读取
python可利用xlrd包读取Excel文件。
查看当前文件下的工作蒲
import xlrd
def xl_read():
book = xlrd.open_workbook('product.xlsx')
for sheet in book.sheets():
print(sheet.name)
if __name__ == '__main__':
xl_read()
#运行结果
Sheet1
Sheet2
读取文件信息
import xlrd
def xl_read_data():
book = xlrd.open_workbook('product.xlsx')
sheet = book.sheet_by_name('Sheet1')
print('工作蒲:{}'.format(sheet.name))
print('数据行数:{}'.format(sheet.nrows))
print('产品数据')
print('=' * 50)
for i in range(sheet.nrows):
print(sheet.row_values(i)) #获取索引指定的数据行
if __name__ == '__main__':
xl_read_data()
#运行结果
工作蒲:Sheet1
数据行数:11
产品数据
==================================================
['产品ID', '产品名称', '单价', '库存']
[1.0, '苹果汁', 18.0, 39.0]
[2.0, '牛奶', 22.7, 17.0]
[3.0, '番茄酱', 10.0, 13.0]
[4.0, '盐巴 ', 22.0, 53.0]
[5.0, '麻油', 21.35, 0.0]
[6.0, '酱油', 25.0, 120.0]
[7.0, '海鲜粉', 30.0, 15.0]
[8.0, '胡椒粉', 40.0, 6.0]
[9.0, '赞油鸡', 97.0, 39.0]
[10.0, '大甲蟹', 31.0, 13.0]
未完待续!