Python文件读写之CSV、xlrd、xlwt
前言
在写Python脚本文件中常常会用到文件读写操作,为此整理一些常用读写操作。
一、CSV
csv文件是逗号分隔符文件,也称符号分隔文件。常常从数据库中导出的文件就是csv文件。
1.CSV读取文件
#!/usr/bin/env
#coding=utf-8
import csv
filename = "student.csv" #路径地址
with open(filename,'r') as csv_file:
csv_data = csv.reader(csv_file)
next(csv_data) #去掉字段行(第一行)
for row in csv_data:
print(row) #type(row) --> <class 'list'>
print(row[0])
print(row[1])
print(type(row))
#...
2.CSV写文件
#!/usr/bin/env
#coding=utf-8
import csv
fields = ['Name','Age','Sex','Grade']
rows = [
['Lucy','18','female','98'],
['Robot','20','male','88'],
['Boet','19','male','89'],
['Jimeet','22','female','86']
]
rows_dict = [
{'Name':'Lucy','Age':'18','Sex':'female','Grade':'98'},
{'Name':'Robot','Age':'20','Sex':'male','Grade':'88'},
{'Name':'Boet','Age':'19','Sex':'male','Grade':'89'},
{'Name':'Jimeet','Age':'22','Sex':'female','Grade':'86'},
]
filename = "student.csv"
#type1:写入rows的数据
with open(filename,'w') as csv_file:
csv_write = csv.writer(csv_file)
#写入字段 (写入一行)
csv_write.writerow(fields)
#写入行数据 (一次写入多行)
csv_write.writerows(rows)
#type2:写入字典数据
with open(filename,'w') as csv_file:
#创建DictWriter对象
csv_write = csv.DictWriter(csv_file, fieldnames = fields)
#字段写入
csv_write.writeheader()
#行字段的写入
csv_write.writerows(rows_dict)
备注:这些都是简单的csv文件读取方法,如果其他情况需可参考文档
二、excel文件读写之xlrd和xlwt
1.xlwt模块 写excel
#!usr/bin/env
#coding=utf-8
import xlwt
from datetime import datetime
f = xlwt.Workbook(encoding='utf-8')#创建工作薄
sheet1 = f.add_sheet('sheet1')
#sheet1.write(r,c,label ='',style = <xlwt.Style.XFStyle object> ) r为行,c为列,label表格中写的数据,style为一些特殊格式可自定义
#自定义date_style
date_style = xlwt.XFStyle()
date_style.num_format_str = 'yyyy-mm-dd HH:MM:SS'
sheet1.write(0,0,'编号')
sheet1.write(0,1,'姓名')
sheet1.write(0,2,'时间')
sheet1.write(1,0,'1')
sheet1.write(1,1,'Lucy')
sheet1.write(1,2,datetime.now(),date_style)
f.save('biaodan.xls')
备注:api文档地址
2.xlrd模块 excel读取数据
#!/usr/bin/env
#coding=utf-8
import xlrd
from datetime import datetime
book = xlrd.open_workbook('biaodan.xls')
print(book.sheet_names()) #获取该excel下的所有表名
sheet = book.sheet_by_name('sheet1')
#sheet = book.sheet_names()[0]
#sheet.nrows #获取该表的行数
#sheet.ncols #该表列数
#sheet.cell(row,col) #row行,col列 数据类型 时间类型为xldate
#sheet.cell(row,col).ctype #row行,col列的ctype 时间类型为3
#sheet.row_values #row行数据,列表形式返回
for row in range(sheet.nrows):
for col in range(sheet.ncols):
if sheet.cell(row,col).ctype == 3:
date_ex = xlrd.xldate_as_tuple(sheet.cell(row,col).value,0)
print(datetime(*date_ex))
continue
print(sheet.cell(row,col).value)
xlrd.xldate.xldate_as_tuple(xldate,datemode )
将Excel编号(假定为代表日期,日期时间或时间)转换为适合于提供给datetime或mx.DateTime构造函数的元组。
参数:
xldate - Excel编号
datemode - 基于0:1900,基于1:1904。
备注:api文档