python常用数据文件(Excel、csv文件)的读写操作

760 阅读3分钟

这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战

前言:

之前在使用python爬虫的时候往往要把数据保存到Excel或csv文件里,所以涉及了文件读写操作,在此做一下整理。

1.Excel文件操作(xlrd、xlwt模块)

1.Excel文件简介

Excel中的三大对象:

  • WorkBook:工作簿对象
  • Sheet:表单对象
  • Cell:表格对象

其中工作簿对象代表整个Excel文件,表单对象代表Excel文件中的每一页sheet,cell对象代表每一个数据格。

Excel文件对象.jpg

  1. 其中xlrd主要是读取Excel文件中表格数据,xlwt模块主要是往Excel文件中数据的。

1.2 xlrd模块读文件

以下表为例

Excel测试文件1.jpg

  1. xlrd库的open_wordbook()方法用来打开一个Excel文件

    workboot = xlrd.open_workbook("Excel文件测试用.xlsx")
    
  2. 工作簿对象的sheet_names()方法用来获取工作簿的所有sheet页的名字

    sheetNames = workboot.sheet_names()
    

    输出:

    ['学科', '学生']
    
  3. 可以通过sheet的索引号(即页号)获取sheet页面(注意索引号从0开始),或通过sheet的名字获取该sheet

    sheet1 = workboot.sheet_by_index(1)
    sheet11 = workboot.sheet_by_name("学生")
    
  4. sheet对象的nrows方法获取总行数,ncols获取总列数

    rows = sheet1.nrows
    clo = sheet1.ncols
    

    输出:

    行数:5  列数:4
    
  5. cell(rowx, colx):获取sheet对象中第rowx行,第colx列的单元对象,返回值的格式为“单元类型:单元值”

    data = sheet1.cell(2, 1)
    

    输出:

    text:'数科'
    
  6. cell_value(rowx, colx):获取sheet对象中第rowx行,第colx列的单元数据,返回值为当前值

    data = sheet1.cell_value(2, 1)
    

    输出:

    数科
    
  7. row_slice(rowx, start_colx, end_colx):以切片方式获取sheet中第rowx行从start_colx列到end_colx列的单元,返回值为列表;

    data = sheet1.row_slice(0, 1, 3)
    

    输出:

    [text:'班级', text:'年龄']
    
  8. col_values(colx, start_rowx, end_rowx): 获取sheet中第colx列从start_rowx行到end_rowx行的数据,返回值为列表。

    row_data = sheet1.col_values(0, 1, 4)
    

    输出:

    ['小明', '小红', '李华']
    
  9. col_slice(colx, start_rowx, end_rowx): 以切片方式获取sheet中第colx列从start_rowx行到end_rowx行的数据,返回值为列表。

    row_data = sheet1.col_slice(0, 1, 4)
    

    输出:

    [text:'小明', text:'小红', text:'李华']
    

1.3 xlwt模块(对后缀为.xls文件进行写操作)

  1. 创建一个工作簿

    xl = xlwt.Workbook(encoding='utf-8')
    
  2. 创建一个sheet对象,第二个参数是指单元格是否允许重设置,默认为False

    sheet = xl.add_sheet('信息', cell_overwrite_ok=False)
    
  3. 设定样式

    # 初始化样式
    style = xlwt.XFStyle()
    # 为样式创建字体
    font = xlwt.Font()
    font.name = 'Times New Roman'
    # 黑体
    font.bold = True
    # 下划线
    font.underline = False
    # 斜体字
    font.italic = True
    # 设定样式
    style.font = font
    
  4. 往sheet页中写入数据

    # 第一个参数代表行,第二个参数是列,第三个参数是内容,第四个参数是格式
    sheet.write(0, 0, '姓名')
    sheet.write(0, 1, '性别', style)
    
  5. 可以通过循环将列表的数据写入sheet页中

    names = ["张三", "李四", "王五", "小红", "李华"]
    sexs = ["男", "男", "男", "女", "男"]
    # 数据行号
    for i in range(len(names)):
        sheet.write(line, 0, names[i])
        sheet.write(line, 1, sexs[i])
        line+=1
    
  6. 保存文件

    xl.save('Excel文件测试用2.xls')
    

结果:

Excel文件测试2.jpg

2.csv文件文件操作

2.1简介:

相较于Excel文件,csv文件更易操作些,往往见到的数据文件在结构不是很复杂的情况下大都是csv文件

open 打开文件有多种模式,下面是常见的4种

r:读数据,默认模式

w:写数据,如果已有数据则会先清空

a:向文件末尾追加数据

x : 写数据,如果文件已存在则失败

第2至4种模式如果第一个参数指定的文件不存在,则会先创建一个空文件

2.2写操作

2.2.1写文件方法一(正常写入)

with open('csvFileTest2.csv', 'w', newline='') as f:
    head = ['姓名', '分数']
    rows = [
        ['张三', 80],
        ['李四', 90]
    ]
    # 定义一个变量对文件进行写入
    writer = csv.writer(f)
    # 写入一行数据
    writer.writerow(head)
    # 写入多行数据
    writer.writerows(rows)

2.2.2 写文件方法二(写入字典类型数据)

with open('csvFileTest2.csv', 'w', newline='') as f:
  head = ['姓名', '分数']
  rows = [
        {'姓名': '张三', '分数': 80},
        {'姓名': '李四', '分数': 90}
      ]
  # 以字典形式写入数据
  writer = csv.DictWriter(f, head)
  writer.writeheader()
  writer.writerows(rows)

2.3csv文件读

with open('csvFileTest2.csv') as f:
  reader = csv.reader(f)
  for row in reader:
    print(row)