Python常规处理excel文件

1. os.walk() :遍历制定文件夹下的所有文档

os.walk(): 返回Directory tree generator。
每次生成格式为(dirpath, dirnames, filenames) 的tuple,元素依次是当前路径、当前路径下文件夹列表、当前路径下文件名列表。

In [7]: import os

In [8]: path = 'd:/ex2'

In [9]: for dirname,dirpath,filename in os.walk(path):
   ...:     print(dirname,dirpath,filename)

2. pd.read_excel

除了使用xlrd库或者xlwt库进行对excel表格的操作读与写,而且pandas库同样支持excel的操作;且pandas操作更加简介方便

pd.read_excel(io, sheetname=0,header=0,skiprows=None,index_col=None,names=None,
                arse_cols=None,date_parser=None,na_values=None,thousands=None, 
                convert_float=True,has_index_names=None,converters=None,dtype=None,
                true_values=None,false_values=None,engine=None,squeeze=False,**kwds)
  1. sheetname:默认是sheetname为0,返回多表使用sheetname=[0,1],若sheetname=None是返回全表 。注意:int/string返回的是dataframe,而none和list返回的是dict of dataframe。
    sheet = pd.read_excel('example.xls',sheetname= [0,1])
  2. header :指定作为列名的行,默认0,即取第一行,数据为列名行以下的数据;若数据不含列名,则设定 header = None;
    sheet = pd.read_excel('example.xls',sheetname= 1,header = None)
  3. skiprows:省略指定行数的数据
    sheet = pd.read_excel('example.xls',sheetname= 1,header = None,skiprows= 1)
  4. skip_footer:省略从尾部数的行数据
    pd.read_excel('example.xls',sheetname= 1,header = None,skip_footer= 1)
  5. index_col :指定列为索引列,也可以使用 u’string’
    sheet = pd.read_excel('example.xls',sheetname= 1,header = None,skip_footer= 1,index_col=1)
  6. names:指定列的名字,传入一个list数据
    sheet = pd.read_excel('example.xls',sheetname= 1,header = None,skip_footer= 1,index_col=1,names=['a','b','c'])

3. xlrd

import xlrd
data = xlrd.open_workbook('teste.xls') # 打开xls文件
table = data.sheets()[0] # 打开第一张表
nrows = table.nrows      # 获取表的行数
for i in range(nrows):   # 循环逐行打印
    if i == 0: # 跳过第一行
        continue
    print table.row_values(i)[:10] # 取前十三列

使用xlrd读取文件,使用xlwt生成Excel文件(可以控制Excel中单元格的格式)。但是用xlrd读取excel是不能对其进行操作的;而xlwt生成excel文件是不能在已有的excel文件基础上进行修改的,如需要修改文件就要使用xluntils模块。

import xlrd
import xlutils.copy
#打开一个workbook
rb = xlrd.open_workbook('E:\\Code\\Python\\test1.xls') 
wb = xlutils.copy.copy(rb)
#获取sheet对象,通过sheet_by_index()获取的sheet对象没有write()方法
ws = wb.get_sheet(0)
#写入数据
ws.write(1, 1, 'changed!')
#添加sheet页
wb.add_sheet('sheetnnn2',cell_overwrite_ok=True)
#利用保存时同名覆盖达到修改excel文件的目的,注意未被修改的内容保持不变
wb.save('E:\\Code\\Python\\test1.xls')

4. Xlsxwrite

创建一个Workbook的实例对象。可以传入一个文件名字,如果不想生成的文件在当前路径下面,可以在文件名字前面带上绝对路径。
add_worksheet()就是增加一个sheet
然后关闭这个对象,完成xlsx文件的生成。

import xlsxwriter
 
workbook = xlsxwriter.Workbook('hello.xlsx')
worksheet = workbook.add_worksheet()
worksheet.set_column('B:B', len('hello world')+1)
worksheet.write('B5', 'hello world')
# 或者:worksheet.write('A1', 'hello world')
workbook.close()
#写入Excel
write_2 = pd.ExcelWriter('D:\\ex2\\due\\finally_2.xlsx')
tar_data.to_excel(write_2,'tar')

#写入csv
data2.to_csv('d:/ex2/tmp_matance_2016.csv',sep=',')

5. pandas对指定列进行填充的方法

#读取表头文件,用来做合并后的表的标题;
name = pd.read_excel("D:\\ex2\\1\\titlename.xlsx")
#在read_excel中names需要传入一个list
title = list(name)
#读取文件;
data1 = pd.read_excel("D:\\ex2\\1\\tar_2016.xlsx",header=None,skiprows=4,names = title)
#需要填充NA所在的行;
col_to_fill = [‘a','b']
#Fillna():填充
data1[col_to_fill] = data1[col_to_fill].ffill()

6. DataFrame.to_excel多次写入不同Sheet

"""
d_f1,d_f2均为sql查询来的数据
excelfilepath为要生成保存的excel文件地址
"""


write = pd.ExcelWriter(excelfilepath)
df1 = pd.DataFrame(d_f1)
#excel的标题
excel_header = ['日期','年龄']
df1.to_excel(write,sheet_name='Sheet1',header=excel_header,index=False)


df2 = pd.DataFrame(d_f2)
excel_header = ['日期','人数']
df2.to_excel(write,sheet_name='Sheet2',header=excel_header,index=False)
write.save()

你可能感兴趣的:(Python常规处理excel文件)