PYTHON基础知识学习笔记(十四)

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]

未完待续!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值