一、软件
1.1 Python运行环境
官网下载,源安装不推荐,嵌入式安装不方便写大程序,窗口安装包也不大安装方便。
1.2 PyCharm
小功能没必要安装
1.3 Cmder
二、Excel自动化处理
需要的三方库:
- xlrd:安装方法,安装好python开发环境后输入命令“pip install xlrd”,用于读excel
- xlwt:安装方法,安装好python开发环境后输入命令“pip install xlwt”,用于写excel
- xlutils:安装方法,安装好python开发环境后输入命令“pip install xlutils”,用于修饰excel样式
- pymysql:安装方法,安装好python开发环境后输入命令“pip install pymysql”,用于操作MySQL数据库
注意:最新的xlrd/xlwt可能不支持xlsx文件,解决办法:①安装低版本xlrd,pip install xlrd==1.2.0 ②将文件后缀名改为xls,高版本的xlrd依然支持xls文件格式
2.1 Python读写Excel
#读Excel
import xlrd
#得到工作簿
xlsx = xlrd.open_workbook('d:/7月下旬入库表.xlsx')
#得到工作表1:通过工作表顺序得到表
table = xlsx.sheet_by_index(0)
#得到工作表2:通过工作表名得到
table = xlsx.sheet_by_name("表名")
#得到表格中数据1,直接使用单元格地址
text = table.cell_value(0,0)
#(0,0)是单元格地址,行列都是用数字表示,从0开始。比如(D6)单元格就是(5,3),先行后列。
#table.cell(0,0).value这个写法也行,属于方法1的变形
#得到表格中数据2,通过类似数据的方法取值
text = table.row(1)[2].value
#写Excel
import xlwt
#创建工作簿
new_workbook = xlwt.Workbook()
#创建工作表,表名可以不填
worksheet = new_workbook.add_sheet('表名')
#写入单元格
worksheet.write(0,0,'test')
#写后保存
new_workbook.save('d:/test.xls')
2.2 Python操作Excel表格样式
from xlutils.copy import copy
import xlrd
import xlwt
#使用xlrd打开文件,第2个参数表示带格式打开文件
tem_excel = xlrd.open_workbook("文件名", formatting_info = True)
tem_sheet = tem_excel.sheet_by_index(0)
#使用xlutils.copy复制源表
new_excel = copy(tem_excel)
new_sheet = new_excel.get_sheet(0)
#定义格式
style = xlwt.XFStyle()
font = xlwt.Font()
font.name = "微软雅黑"
font.bold = True #字体加粗
font.height = 360 #对应字号,这个值的计算方法=字号*20
style.font = font
#边框样式
borders = xlwt.Borders()
borders.top = xlwt.Borders.THIN #THIN是边框线,表示细线
borders.bottom = xlwt.Borders.THIN
borders.left = xlwt.Borders.THIN
borders.right = xlwt.Borders.THIN
style.borders = borders
#对齐方式
alignment = xlwt.Alignment()
alignment.horz = xlwt.Alignment.HORZ_CENTER #水平中心对齐
alignment.vert = xlwt.Alignment.VERT_CENTER #垂直中心对齐
style.alignment = alignment
#带格式写入
new_sheet.write(行号, 列号, 内容, style)
new_excel.save("保存文件名")
2.3 Python自动生成统计Excel报表
2.4 Python操作数据库
#python操作MySQL数据库
import pymysql
#连接数据库
database = pymysql.connect("数据库地址IP","用户名","密码","数据库名",charset='utf8')
#初始化指针,使用指针查询数据库
cursor = database.cursor()
#增
#1.写出sql语句
sql = "insert into tableName() values ()"
#2.用指针操作数据库
cursor.execute(sql)
#3.对数据库数据变更后,必须commit,否则数据不变化
database.commit()
#4.数据库关闭
database.close()
#改
sql = "update tableName set ... where ..."
cursor.execute(sql)
database.commit()
database.close()
#查
sql = "select ... from tableName where ..."
cursor.execute(sql)
result = cursor.fetchall()
print(result)
#删
sql = "delete from tableName where ..."
cursor.execute(sql)
database.commit()
database.close()
2.5 Python操作MySQL数据库自动生成统计报表
2.6 用xlsxwriter,openpyxl 更灵活操作 Excel
xlwt最多只能操作256列数据,为了更长的数据长度,使用xlsxwriter
xlsxwriter 库不支持带格式的文件
openpyxl 库不稳定
import xlsxwriter as xw
workbook = xw.Workbook('路径包括文件名')
sheet0 = workbook.add_worksheet('工作表名')
for i in range(0,300)
sheet0.write(0,i,i)
workbook.close()
import openpyxl
workbook = openpyxl.load_workbook("文件名")
sheet0 = workbook['Sheet1']
sheet0['B3'] = '5'
sheet0['B6'] 7
workbook.save('文件名')
2.7 把文件名快速整理到Excel中
#学习过程
import os
import xlwt
file_dir='d:/'
os.listdir(file_dir)
#列出所有文件名
new_workbook = xlwt.Workbook()
worksheet = new_workbook.add_sheet()
n = 0
for i in os.listdir(file_dir):
worksheet.write(n, 0, i)
n += 1
new_workbook.save('文件名')
#博主统计的两种方法
#第一种,用xlwt库,整理出的文件必须为xls格式,可以带格式显示
#第二种,用xlsxwriter库,整理出的文件可以是xlxs文件,但不可以带格式显示
#使用前需要先安装对应的库:在cmd下执行下列语句
#pip install xlwt==1.2.0
#pip install xlsxwriter
#pip install openpyxl
import os
import xlwt
import xlsxwriter as xw
import openpyxl
#修改路径即可列出不同路径下的文件名
soruceFile_dir = "C:/Users/Song/Desktop"
aimWorkbookName = "当前目录下所有文件名.xlsx"
aimWorksheetName = "文件名汇总"
aimFile_dir = "C:/Users/Song/Desktop"
#使用xlwt
#new_workbook = xlwt.Workbook()
#worksheet = new_workbook.add_sheet("fileName")
#n = 0
#for i in os.listdir(file_dir):
# worksheet.write(n, 0, n+1)
# worksheet.write(n, 1, i)
# n += 1
#new_workbook.save("C:/Users/Song/Desktop/fileNameList.xls")
#使用xlsxwriter
new_workbook = xw.Workbook(aimFile_dir+"/"+aimWorkbookName)
worksheet = new_workbook.add_worksheet(aimWorksheetName)
cowIndex = 0
for i in os.listdir(soruceFile_dir):
worksheet.write(cowIndex, 0, cowIndex+1)
worksheet.write(cowIndex, 1, i)
cowIndex += 1
new_workbook.close()
#使用openpyxl,怎样新建一个工作表?
#workbook = openpyxl.load_workbook(file_dir+"/fileNameList.xlsx")
#worksheet = workbook._add_sheet("sheet2")
#n = 1
#for i in os.listdir(file_dir):
# worksheet["a"+str(n)] = n
# worksheet["b"+str(n)] = i
# n +=1
#workbook.save()
三、文件自动化处理
3.1 正则表达式
测试正则效果的好软件:Regester
'''
\b -> 代表单词开头或者结尾,不代表任何东西,只是标识位置,单词只能包括数字、字母、汉字等,不包括特殊符号
^ -> 代表字符串的开头
$ -> 代表字符串的结尾
\d -> 匹配一位数字
\d{数量} -> 匹配若干数量个数字
\d{数量1,数量2} -> 匹配一个数字个数在数量1~数量2之间的数字串
\d{数量1,} -> 匹配一个数字个数大于等于数量1的数字串
. -> 匹配除换行符以外的任意字符
* -> 代表前面的部分重复任意次,可能为0次
+ -> 代表前面的部分重复任意次,不能为0次
? -> 代表前面的部分0次或1次
\s -> 匹配任意是空白符,包括空格,制表符(Tab),换行符,中文全角空格等
\w -> 匹配字母或数字或下划线或汉字
() -> 分组 括号里是一个整体
| -> 或
[范围] -> 某个范围的字符[0-9][a-z][A-Z]
\W -> 匹配任意不是字母,数字,下划线,汉字的字符
\S -> 匹配任意不是空白符的字符
\D -> 匹配任意非数字的字符
\B -> 匹配不是单词开头或结束的位置
[^范围] -> 匹配除了范围以外的任意字符
(?=条件) -> 零宽断言(后匹配):在后面匹配条件,但这些内部不被选中
(?<=条件) -> 零宽断言(前匹配)
(?!条件) -> 零宽断言(后匹配)
(?<!条件) -> 零宽断言(前匹配)
识别单个汉字:[\u4e00-\u9fa5]
识别汉字串:[\u4e00-\u9fa5]+
'''
\d #匹配每一个数字,每个数字为单独的
\d{6} #匹配一个6个数字的串,如果有一个数字串超过6位,则截取前6位
\b\d{6}\d #匹配一个只有6个数字的串,如果有一个数字串超过6位,则不匹配
\b\d{6,10}\d #匹配一个有6~10个数字的串,如果有一个数字串小于6位或大于10次,则不匹配
\b\d{6,}\d #匹配一个数字个数大于等于6位的串
3.2 python使用正则表达式
'''
python使用正则表达式
'''
import re
#源文本
i = "02.阿郎恋曲.mp302.阿郎恋曲.mp3"
#指定正则表达式
pattern = re.compile("(?<=\d{2}\.)[\u4e00-\u9fa5]+\.\w{3}")
#调用正则表达式1
matching1 = pattern.search(i)
#调用正则表达式2
matching2 = pattern.findall(i)
print(matching1)
#输出结果:<re.Match object;span=(3,11),match="阿郎恋曲.mp3">
#只显示第一次匹配的内容,同时可以返回位置
print(matching2)
#输出结果:["阿郎恋曲.mp3", "阿郎恋曲.mp3"]
#可以显示每个匹配的内容,但无法显示位置
3.3 用python管理文件
'''
列出目录下所有文件
'''
import os
list_all = []
for root,dirs,files in os.walk("D:/file_test"):
for name in files:
file_path = os.path.join(root, name)
#print(os.path.split(file_path))
file_name = os.path.split(file_path)[-1]
list_all.append(file_name)
print(list_all)
3.4 用python进行文件重命名
'''
用python进行文件重命名
'''
import re
import os
pattern = re.compile(r".+\.pptx")
for root, dirs, files in os.walk("D:/file_text"):
for name in files:
file_path = os.path.join(root, name)
matching = pattern.search(file_path)
if matching: #如果没匹配到,matching为none
os.rename(file_path, os.path.split(file_path)[-2] + "/123.pptx")
3.5 用python批量复制和删除文件
'''
用python批量复制和删除文件
'''
import re
import os
pattern = re.compile(r".+\.docx")
for root, dirs, files in os.walk(""):
for name in files:
file_path = os.path.join(root, name)
matching = pattern.search(file_path)
if matching:
#复制文件,需要下面这两天语句
command_line = "copy %s d:\\file2" % file_path.replace("/", "\\")
os.system(command_line)
#删除文件,只需要下面一条语句
os.remove(file_path)