Python操作CSV和Excel

概述

csv是最通用的文件格式,本质是文本文件,用记事本即可打开。同一行中每个字段间用逗号分隔,在csv中显示的是在不同单元格中,在记事本中显示的是一行中用逗号分隔。

xls是excel专用格式,是二进制文件,只有excel才能打开。

 

CSV操作

csv写入

1.写入列表(list)数据

使用 csv.writer 对象

delimiter 指定同一行每个字段的分隔字符。若不指定,默认以英文逗号(,)分隔,在csv文件中显示的是不同单元格,若以其他符号分隔,则显示在csv同一单元格中

import csv
with open(r'e:zarten.csv', 'w', newline='') as csvfile:
    csv_writer = csv.writer(csvfile, delimiter=' ')

    csv_writer.writerow(['a', 'b', 'c'])
    csv_writer.writerow(['d', 'e', 'f'])

 

2.写入字典(dict)数据

使用 csv.DictWriter 对象

import csv
with open(r'e:zarten.csv', 'w', newline='') as csvfile:
    fieldnames = ['name', 'age']
    csv_writer = csv.DictWriter(csvfile, fieldnames= fieldnames, delimiter=' ')#csv中默认,分隔单元格,delimiter可以不指定

    csv_writer.writeheader()
    
    csv_writer.writerow({'name' : 'Zarten1', 'age' : 1})
    csv_writer.writerow({'name' : 'Zarten2', 'age' : 2})

 

csv读取

1.读取普通csv

使用 csv.reader 对象

import csv
with open(r'e:zarten.csv', 'r', newline='') as csvfile:
    csv_reader = csv.reader(csvfile, delimiter= ' ')
    headers = next(csv_reader) #获取第一行,可能是头
    print(headers)
    for row in csv_reader:
        print(row)
        
#输出结果:
# ['name', 'age']
# ['Zarten1', '1']
# ['Zarten2', '2']

 

2.读取字典(dict)csv

使用 csv.DictReader 对象

import csv
with open(r'e:zarten.csv', 'r', newline='') as csvfile:
    csv_reader = csv.DictReader(csvfile, delimiter= ' ')
    for row in csv_reader:
        print(row['name'], row['age'])

 

excel操作

excel操作需要使用第三方库,这里推荐使用openpyxl

官方文档: Tutorial - openpyxl 2.5.12 documentation

安装

pip3 install openpyxl

 

excel写入

import openpyxl

file_path = r'e:zarten.xlsx'

wb = openpyxl.Workbook()
sheet = wb.active
sheet.title = 'Zarten_info'

headers = ['name', "age"]
sheet.cell(1, 1, value=headers[0])
sheet.cell(1, 2 ,value=headers[1])

rows1 = ['Zarten1', 1]
sheet.append(rows1)

rows2 = ['Zarten2', 2]
sheet.append(rows2)

 

excel读取

import openpyxl

file_path = r'e:zarten.xlsx'

wb = openpyxl.load_workbook(file_path)
sheet = wb['Zarten_info']

for row in sheet.rows:
    row_info = [row[0].value, row[1].value]
    print(row_info)

    for cell in row:
        print(cell.value)


原文 https://zhuanlan.zhihu.com/p/54705476
原文地址:https://www.cnblogs.com/php-linux/p/12522411.html