Python 操作csv和excel表格

1. 操作csv表格

使用的库 csv

1. csv文件里读取数据

代码

1. 以列表形式打开

import csv

f = open('csv_test.csv', 'r')       # 打开csv文件
csv_reader = csv.reader(f)          # 将打开的文件装换成csv可读的对象
for each in csv_reader:             # 打印,结果是个列表
    print(each)
f.close()

结果

['name', 'age', 'score']
['张三', '18', '100']
['王二', '17', '98']
['麻子', '20', '99']

2.以字典形式打开

import csv

f = open('csv_test.csv', 'r')       # 打开csv文件
csv_reader = csv.DictReader(f)          # 将打开的文件装换成csv可读的对象,注意是DictReader()
for each in csv_reader:
    print(each['name'])
f.close()

结果

张三
王二
麻子

说明

不能直接print(csv_reader) 结果为

<_csv.reader object at 0x7f67f2328198>(第一种)

<csv.DictReader object at 0x7f29ef0a4710>(第二种)

以字典形式打开会将表头作为字典的key,而其余的每一行会成为字典的value

2. 将数据写进csv文件

代码

1.以列表的方式

import csv

contents = [['id', 'name', 'hobby'],
            ['001', '老王', 'Java'],
            ['002','老胡','Python'],
            ['003','老李','PHP']]

with open('csv_test2.csv', 'a', newline='') as f:
    csv_writer = csv.writer(f)
    for each in contents:
        csv_writer.writerow(each)

结果

id name hobby
1 老王 Java
2 老胡 Python
3 老李 PHP

2.以字典的方式

import csv

header = ['id', 'name', 'hobby']
contents = [{'id':'1','name':'老王','hobby':'Java'},
            {'id':'2','name':'老胡','hobby':'Python'},
            {'id':'3','name':'老李','hobby':'PHP'}]

with open('csv_test4.csv', 'a', newline='') as f:
    csv_writer = csv.DictWriter(f, header)
    csv_writer.writeheader()
    for each in contents:
        csv_writer.writerow(each)

结果

id name hobby
1 老王 Java
2 老胡 Python
3 老李 PHP

说明

打开新的文件时需要newline='',否则会产生空行

上面的代码也可以用csv_writer.writerows(contents)实现(两种均可)

以字典形式写入时必须先写头具体操作见代码


2. 操作excel表格

使用的库 xlrd(读), xlwt(写)

1. 从excel文件里读取数据

import xlrd

book = xlrd.open_workbook('excel_test1.xls') # 打开excel文件
sheet_1 = book.sheets()[0]  # 打开第一张表

num_rows = sheet_1.nrows    # 获取当前表的所有的行数
num_cols = sheet_1.ncols    # 获取当前表的所有的列数

# 遍历行, 会将每一行以列表的形式输出
for row in range(num_rows):
    row_values = sheet_1.row_values(row)    # 使用的函数是row_values()
    print(row_values)

# 遍历列, 会将每一列以列表的形式输出
for col in range(num_cols):
    col_values = sheet_1.col_values(col)    # 使用的函数是col_values()
    print(col_values)

# 遍历单元格, 从上到下从左到右输出每一个单元格的内容
for row in range(num_rows):
    for col in range(num_cols):
        cell_value = sheet_1.cell_value(row, col)   # 使用的函数是cell_value()
        print(cell_value)

说明

主要函数,属性

book = xlrd.open_workbook('excel_test1.xls') # 打开excel文件
sheet_1 = book.sheets()[0] # 打开第一张表

num_rows = sheet_1.nrows # 获取当前表的所有的行数
num_cols = sheet_1.ncols # 获取当前表的所有的列数

row_values = sheet_1.row_values(row) # 使用的函数是row_values()

col_values = sheet_1.col_values(col) # 使用的函数是col_values()

cell_value = sheet_1.cell_value(row, col) # 使用的函数是cell_value()

注意xlrd不可以改动excel文件

2. 将数据写进excel文件中

import xlwt

# 创建Workbook对象
book = xlwt.Workbook(encoding='utf-8', style_compression=0)

'''
Workbook类初始化时有encoding和style_compression参数
encoding='utf-8',为输入中文
style_compression,表示是否压缩
'''

# 添加表格
sheet = book.add_sheet('sheet1', cell_overwrite_ok=True)

'''
sheet1为表格的名称
cell_overwrite_ok,表示是否可以覆盖单元格
'''

# 向表sheet1中添加数据
sheet.write(0, 0, 'id')  # 前两个参数为单元格坐标,这里表示第一行第一列(从0开始),后面为内容
sheet.write(0,1, 'name')
sheet.write(1,0, '1')
sheet.write(1,1, '老胡')


# 保存到指定的Excel文件中
book.save('excel_test2.xls')

说明

主要函数

book = xlwt.Workbook(encoding='utf-8', style_compression=0) # 创建Workbook对象

sheet = book.add_sheet('sheet1', cell_overwrite_ok=True) # 添加表格

sheet.write(0, 0, 'id') # 前两个参数为单元格坐标,这里表示第一行第一列(从0开始),后面为内容

book.save('excel_test2.xls') # 保存文件

posted @ 2018-12-10 16:37  KainHuck  阅读(3439)  评论(0编辑  收藏  举报