【Python学习】Day-024 csv文件操作、excel文件操作

发布于:2023-01-16 ⋅ 阅读:(535) ⋅ 点赞:(0)

1. csv文件操作

1.1 什么是csv

  • csv文件叫逗号分隔值文件 - 每一行内容是通过逗号来区分出不同的列
  • csv文件可以直接通过excel打开,以行列的形式保存和显示数据,但是相对excel文件,它只能存储数据,不能保存公式和函数。

1.2 csv文件读操作

  • csv.reader(文件对象) - 获取文件内容返回一个迭代器,并且以列表为单位返回每一行内容
  • csv.DictReader(文件对象) - 获取文件内容返回一个迭代器,并且以字典为单位返回第2行开始的每一行内容(字典的键是第一行内容)
import csv

# 1)打开csv文件
f = open('files/电影.csv', 'r', encoding='utf-8')

# 2)创建reader获取文件内容
# reader1 = csv.reader(f)
# print(list(reader1))

reader2 = csv.DictReader(f)
print(list(reader2))

f.close()

1.3 csv文件写操作

  • csv.writer(文件对象) - 创建writer对象,这个对象在写入数据的时候一行对应一个列表
  • csv.DictWriter(文件对象, 键列表) - 创建writer对象,以字典为单位写入数据
  1. 以列表为单位写入内容

    import csv
    f = open('files/data.csv', 'w', encoding='utf-8')
    writer = csv.writer(f)
    
    # 一次写入一行内容
    writer.writerow(['姓名', '出生日期', '性别', '电话'])
    writer.writerow(['小明', '1999-9-9', '男', '110'])
    
    # 一次写入多行内容
    writer.writerows([
        ['小花', '2000-3-24', '女', '120'],
        ['张三', '19998-7-5', '男', '119']
    ])
    
  2. 以字典为单位写入内容

    import csv
    f = open('files/data.csv', 'w', encoding='utf-8')
    
    writer = csv.DictWriter(f, ['姓名', '出生日期', '性别', '电话'])
    
    # 写入文件头(将字典的键写入到文件开头)
    writer.writeheader()
    
    # 一次写入一行内容
    writer.writerow({'姓名': 'xiaoming', '出生日期': '1999-9-9', '电话':'110', '性别': '男'})
    # 一次写入多行内容
    writer.writerows([
        {'姓名': 'xiaohua', '出生日期': '1999-9-9', '电话':'110', '性别': '男'},
        {'姓名': 'zhangsan', '出生日期': '1999-9-9', '电话':'110', '性别': '男'}
    ])
    

2. excel文件操作

2.1 认识excel文件

  • 工作簿: 一个excel文件就是一个工作簿
  • 工作表:一个工作簿中可以有多个工作表(至少一个)
  • 单元格:单元格是excel文件保存数据的基本单位
  • 行号和列号:可以确定单元格位置

2.2 excel文件读操作

# 获取excel文件内容
# 1)打开excel文件创建工作簿对象
"""
openpyxl.open(excel文件路径)    
openpyxl.load_workbook(excel文件路径)
"""
# workbook = openpyxl.open('files/三国人物数据.xlsx')
workbook = openpyxl.load_workbook('files/三国人物数据.xlsx')

# 获取工作簿中所有的工作表的表名
result = workbook.sheetnames
print(result)       # ['全部人物数据', '三个国家的武力', '三个国家武将的武力', '三国武将数据', '三国文官数据']

# 2)获取工作表
"""
工作簿对象.active        -      获取活跃表(选中的表) 
工作簿对象[工作表名称]        -   获取指定名字对应的工作表
"""
sheet1 = workbook.active
print(sheet1)

sheet2 = workbook['三国武将数据']
print(sheet2)

# 3)获取单元格
"""
工作表对象.cell(行号, 列号)
"""
cell1 = sheet2.cell(8, 1)
cell2 = sheet2.cell(12, 1)
print(cell1, cell2)

# 4)获取单元格内容
# 单元格对象.value
print(cell1.value)
print(cell2.value)


# 5)获取最大行号和最大列号(保存了数据的有效行和有效列)
# 工作表对象.max_row
# 工作表对象.max_column
print(sheet2.max_row)
print(sheet2.max_column)

# 获取第一列所有数据
column1 = []
for row in range(1, sheet2.max_row+1):
    cell = sheet2.cell(row, 1)
    column1.append(cell.value)

print(column1)

# 获取第1列到第3列所有的数据
for col in range(1, 4):
    column = []
    for row in range(1, sheet2.max_row+1):
        cell = sheet2.cell(row, col)
        column.append(cell.value)
    print(column)

2.3 excel文件写操作

import openpyxl
# 注意:不管是以什么样的方式对excel进行写操作,操作完成后必须保存。

# 1. 新建工作簿
# 1)新建工作簿对象
# workbook = openpyxl.Workbook()
# 2)保存
# 工作簿对象.save(文件路径)
# workbook.save('files/student.xlsx')

# 实际中新建工作簿的时候需要先判断工作簿对应的文件是否已经存在,存在就不需要新建,不存在才新建
# 方法一:
try:
    workbook = openpyxl.open('files/student2.xlsx')
except FileNotFoundError:
    workbook = openpyxl.Workbook()
    workbook.save('files/student2.xlsx')

# 方法二:
# import os
# # os.path.exists(文件路径)  -  判断指定文件是否存在,存在返回True,不存在返回False
# if os.path.exists('files/student2.xlsx'):
#     workbook = openpyxl.open('files/student2.xlsx')
# else:
#     workbook = openpyxl.Workbook()
#     workbook.save('files/student2.xlsx')


# 2. 工作表的写操作
# 1)新建工作表
# 工作簿对象.create_sheet(表名, 下标)
# workbook.create_sheet()
# workbook.create_sheet('Python')
# workbook.create_sheet('Java', 0)
# workbook.save('files/student2.xlsx')

# 实际中的新建表:没有的时候才新建,有的时候直接打开
if 'Python' in workbook.sheetnames:
    sheet = workbook['Python']
else:
    sheet = workbook.create_sheet('Python')
    workbook.save('files/student2.xlsx')


# 2)删除工作表
# 工作簿对象.remove(工作表对象)
# workbook.remove(workbook['Sheet1'])
# workbook.save('files/student2.xlsx')

# 实际中删除表:存在的时候才能删
if 'Sheet1' in workbook.sheetnames:
    workbook.remove(workbook['Sheet1'])
    workbook.save('files/student2.xlsx')


# 3.单元格的写操作
# 单元格对象.value = 数据
java_sheet = workbook['Java']
java_sheet.cell(1, 3).value = '电话'
java_sheet.cell(2, 1).value = None
java_sheet.cell(4, 2).value = 'stu003'

workbook.save('files/student2.xlsx')


网站公告

今日签到

点亮在社区的每一天
去签到