Python实现读写CSV和Excel

CSV文件的读写

基本格式:
  • 需要导入模块:import csv
import csv

# 列表csv表头
headers = []
# 列表csv数据
rows = []
# 字典csv数据
dict_rows = {}

# 写入的数据为列表结构
with open('test1.csv', 'w', newline='') as w:
    # 创建一个csv的writer对象
    w_csv = csv.writer(w)
    # 写入csv表头--写入一行
    w_csv.writerow(headers)
    # 写入csv数据--写入多行
    w_csv.writerows(rows)

# 写入的数据为字典类型
with open('test2.csv', 'w', newline='') as w:
    # 创建一个csv的DictWriter对象
    w_csv = csv.DictWriter(w, ['字典键1','键2','...'])
    # 写入一行当表头,即字典键名
    w_csv.writeheader()
    # 写入对行数据,即字典的所有值
    w_csv.writerows(dict_rows)

# 读取CSV数据
with open('text1.csv') as r:
    # 创建一个DictReader对象
    r_csv = csv.DictReader(r)
    for row in r_csv:
        # 字典键,即csv的表头名
        print(row.get('字典键1'), row.get('字典键2'), row.get('...'))
CSV实例:
import csv
headers = [
    '姓名','性别','年龄'
]
rows = [
    ['a','男','18'],
    ['b','女','19'],
    ['c','男','20']
]
with open('test.csv', 'w', newline='') as w:
    w_csv = csv.writer(w)
    w_csv.writerow(headers)
    w_csv.writerows(rows)

Excel表格的读写

使用xlwtxlrd基本格式:
  • import xlwt:写入Excel数据的模块
import xlwt

# 创建表格对象
workbook = xlwt.Workbook(encoding="utf-8")
# 创建工作表
worksheet = workbook.add_sheet('sheet1')
# 写入数据,第一个参数为'行',第二个参数为'列',第三个参数为'内容'
work.sheet.write(0,0,'内容')
# 保存数据表
workbook.save('xxx.xls')
  • import xlrd:读取Excel数据的模块
import xlrd

# 打开Excel文件
workbook = xlrd.open_workbook('excel.xls')
# 设置需要获取的工作表
table = workbook.sheet_by_name('sheet1')
# 获取总行数或总列数
row_count = table.nrows
col_count = table.ncols
# 获取整行或整列的值(返回列表)
row_list = table.row_values(行号)
col_list = table.col_values(列号)
# 获取某一单元格的内容
val = table.cell(行号,列号).value
使用xlwt写入Excel实例:
  • 保存九九乘法表:
import xlwt
workbook = xlwt.Workbook(encoding="utf-8")
worksheet = workbook.add_sheet('sheet1')
# 九九乘法表
for i in range(1,9+1):
    for j in range(1, i+1):
        worksheet.write(i-1,j-1,"%d * %d = %d" % (j,i,i*j))
# 保存表格
workbook.save("九九乘法表.xls")
使用openpyxl基本格式:
  • 安装模块:pip install openpyxl
  • 读取Excel数据:
# 导入模块
from openpyxl import load_workbook

# 需要操作的表
wb = load_workbook('表所在路径')
# 获取Excel文件的所有sheet名称
xxx = wb.sheetnames
# 选择sheet
xxx = wb["sheet1"]
# 获取某一单元格的内容
sheet.call(行号,列号).value
sheet["A1"].value
list(sheet.values)  # 所有数据
sheet.max_column    # 最大列数
sheet.max_row       # 最大行数

# 循环遍历所有sheet
for sheet in wb:
    cell = sheet["A1"].value
# 获取所有行或所有列
for row in sheet.rows:
    row[x].value
for col in sheet.columns:
    col[x].value
  • 写入Excel数据:
from openpyxl import Workbook
from openpyxl import load_workbook

# 在原有表格里追加内容
wb = load_workbook("xxx.xlsx")
sheet = wb["sheet1"]
# 遍历表格索引,写入数据
for x in range(len(xxx)):
    for y in range(len(xxx[x])):
        sheet.cell(x+1, y+1).value = xxx[x][y]
wb.save("xxx.xlsx")

# 创建新的excel表格
wb = Workbook()
sheet = wb.create_sheet("sheet1", -1)
# 遍历表格索引,写入数据
for x in range(len(xxx)):
    for y in range(len(xxx[x])):
        sheet.cell(x+1, y+1).value = xxx[x][y]
wb.save("xxx.xlsx")
  • 其他常用操作:
    • 创建新sheet:
      • wb.create_sheet("名称",下标位置)
    • 修改sheet名称:
      • sheet.title = "新名"
    • 设置默认打开的sheet:
      • wb.active = sheet下标
    • 复制sheet:
      • xxx = wb.copy_worksheet(wb["原sheet"])
      • xxx.title = "新sheet"
    • 删除sheet:
      • del wb["sheet"]
    • 内容居中:
      from openpyxl import Workbook
      from openpyxl.styles import Alignment
      
      # 设置居中样式
      align = Alignment(horizontal='center',vertical='center',wrap_text=True)
      
      # 创建新的excel表格
      wb = Workbook()
      sheet = wb.create_sheet("sheet1", -1)
      # 遍历表格索引,写入数据
      for x in range(len(xxx)):
          for y in range(len(xxx[x])):
              sheet.cell(x+1, y+1).value = xxx[x][y]
              # 引用居中样式
              sheet.cell(x+1, y+1).alignment = algin
      wb.save("xxx.xlsx")
      
    • 插入图片:
      from openpyxl.drawing.image import Image
      # 指定图片
      img = Image('xxx')
      # 设置宽高
      img.width = x
      img.height = y
      # 指定单元格插入图片
      sheet.add_image(img, 'A1')
      
两者的区别:
  1. xlwt单个表格只能存储65000多行,而openpyxl单个sheet可以存储101万行;
  2. xlwt的文件名后缀为xls;而openpyxl的文件名后缀为xlsx;
  3. xlwt写入数据时从0行0列开始;openpyxl从1行1列开始。
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值