今天接到任务需要合并几万行的几个表格,于是决定写个脚本看看pyhon的基本操作。
使用环境:
Python 版本: Python 3.5.2
查看命令:python --version
Ubuntu 16.04
1、先来看看python打印东西,让它运行起来
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
print ("hello world ")
看起来还比较顺利
2、我们来创建一个文件试试
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import time
import os
t = time.strftime('%Y-%m-%d',time.localtime())
suffix = '.txt'
newfile = 'FileName' + t + suffix
if not os.path.exists(newfile):
f = open(newfile, 'w')
print('creat file ' + newfile)
f.close()
else :
print('exit file ' + newfile)
3、文件可以了 但是需要指定路径,不然一直在当前路径下
#创建文件夹
directory ="./merged/"
if(os.path.exists(directory) == False):
os.makedirs(directory)
#change directory
os.chdir(directory)
cwd = os.getcwd()
好像还比较顺利,接下来需要读、写 xlsx文件了
4、用openpyxl 完成xlsx文件读写
一开始百度的都是xlrd,xlwt,后来要做带格式粘贴,它的支持比较少,但是速度真的快。
然后用openpyxl,注意 用xlrd、xlwt处理过的文档就不要用openpyxl处理了,不然打不开。。。
openpyxl好像只支持xlsx格式 xls不行
安装 openpyxl 命令
pip install openpyxl
如果import openpyxl导入不成功:可以卸载再安装
pip uninstall XXXX
5、创建openpyxl的workbook,创建sheet页,获取sheet页
outbook = openpyxl.Workbook()
#中文问题可以转码
outsheetname = "SheetName".encode('utf-8')
outsheetname = outsheetname.decode('utf-8')
outbook.create_sheet(outsheetname) # 添加页
outsheet = outbook[outsheetname]
6、读取xlsx文件
import openpyxl
import os
#读取文件夹下的所有文件
os.chdir('./')
filelist = os.listdir(os.getcwd())
filelist.sort()
print (filelist)
#遍历文件
for filename in filelist:
if(filename.__contains__('.xlsx')):
print('filename : ' + filename)
table = openpyxl.load_workbook(filename)
sheet = table[outsheetname]
#获取表格有效行数
row_num = sheet.max_row
col_num = sheet.max_column
print('max_row',row_num ,'max_column',col_num)
for row in range(row_num ) :
for col in range(14):
print(sheet.cell(row + 1 ,col + 1).value)
print("out row", outrow)
文件的cell索引是从 “1” 开始计算的不是从 “0”
7、写文件到另外一个xlsx文件中
outrow = 0
row_num = sheet.max_row
col_num = sheet.max_column
for row in range(row_num) :
outrow = outrow + 1
for col in range(col_num):
outsheet.cell(outrow + 1,col + 1).value = sheet.cell(row + 1,col+1).value
8、带格式的拷贝(把格式复制过去)
outsheet.cell(outrow + 1,col + 1).font = copy(sheet.cell(row + 1,col+1).font)
outsheet.cell(outrow + 1,col + 1).border = copy(sheet.cell(row + 1,col+1).border)
outsheet.cell(outrow + 1,col + 1).fill = copy(sheet.cell(row + 1 ,col+1).fill)
outsheet.cell(outrow + 1,col + 1).number_format = copy(sheet.cell(row + 1,col+1).number_format)
outsheet.cell(outrow + 1,col + 1).protection = copy(sheet.cell(row + 1,col+1).protection)
outsheet.cell(outrow + 1,col + 1).alignment = copy(sheet.cell(row + 1,col+1).alignment)
9、最后保存不要忘记了
outbook = openpyxl.Workbook()
outsheetname = "newsheet".encode('utf-8')
outsheetname = outsheetname.decode('utf-8')
outbook.create_sheet(outsheetname) # 添加页
outsheet = outbook[outsheetname]
......
#outbook里面有个outsheet,outsheet拷贝了数据
outbook.save("./out/" + "newfile.xlsx")