python脚本:表格和文本操作和re正则和zip压缩

时隔一年多,再次到简书上记录点东西,之前写的几个脚本。
工作使用是的DiVinci和MATLAB,这个有专门的教程文档,看以后有空在简书上转载。

简单python脚本的框架

import os
import re
import time
import csv
import sys
import linecache
import openpyxl

try:
#code
except Exception as e:   #IOError
    print(e)

文本操作

注释:
txtFile是路径,txt_file 是文本描述(打开文本的返回),txt_line 文本的一行

txt_file = open(txtFile, 'r+', encoding='utf-8')
txt_line = linecache.getline(txtFile,3)#读指定行,读取到内存里,没有写模块
while True:
    txt_line = txt_file.readline()#通过while循环迭代来读文本

txt_line[2].replace(buf1,buf2,1)#字符串2替换为1,执行一次(可选)
#用r+打开读文本内容,修改后用w+打开再写入,这个方法很蠢,有空我再找一下其他好的方法
txt_file= open(txtFile, 'w+')#w+打开txt
txt_file.writelines(txt_line)#写入
txt_file.close()#关闭

txt_lines = txt_file.readlines()#readlines全部读到内存里,加快速度
#.readlines() 自动将文件内容分析成一个个的行的列表
#该列表可以由 Python 的 for ... in ... 结构进行处理。
for txt_line in txt_lines :#每循环一次,文件指针自动向下移一行
txt_file.readline()#每读一次,文件指针自动向下移一行

#.readline() 和 .readlines() 之间的差异是后者一次读取整个文件,象 .read() 一样。
#另一方面,.readline() 每次只读取一行,通常比 .readlines() 慢得多。
#仅当没有足够内存可以一次读取整个文件时,才应该使用 .readline()
#with open是支持打开大文本10G的
with open(txtFile, 'r+', encoding='utf-8') as txt_file:#with open打开文件
txt_lines .seek(0)#文件指针移到开头
next(txt_file)#下一行
readlines()读文件,无法判断是否读到末尾,
可以用readline()读文件,直接判断末尾是否为空字符''就可以了

表格操作

f_xlsx = openpyxl.load_workbook(excelFile)#用的openpyxl库
f_xlsx = openpyxl.Workbook()    #新建表格
sheetNames = f_xlsx.get_sheet_names()#获取所有页的list
sheet = f_xlsx["sheet1"]#打开sheet1页
while i<sheet .max_row-1:#自动判断表格末尾,而不是默认的2^32
#如果要遍历表格,还是将表格先读到list里,再遍历,这样能极大提高运行速度
excle_line = sheet.cell(row=i,column=n).value#读,注意判断空是None不是''
sheet.cell(row=i,column=n,value = buff)#写
f_xlsx.save(excelFile)#保存,如果是其他名字是另存为
f_xlsx.close()
sheet.merge_cells(start_row=i, end_row=n-1,start_column=1, end_column=1)#单元格合并
s_ws = s_wb.active()#获取当前使用页

其他

global n #申明使用的是全局变量
os.chdir("D:\\user")#更换脚本的工作目录
time.strftime('%Y_%m_%d',time.localtime(time.time()))#年月日
time.strftime('%H:%M:%S',time.localtime(time.time()))#时分秒
p.subprocess.Popen("cmd.exe/c"+"D:\\user\\a.bat",stdout=subprocess.PIPE,stderr=subprocess.STDOUT)#调用.bat脚本
p.wait()#等待脚本执行完成
os.system("a.bat")#直接通过sys执行脚本
temp = addr[0].strip()#strip(),字符串函数,去除字符串前后的空格和Tab

正则匹配

ret = re.match(r'line :',txt_line)
#用match要在前一个字符处加r,转义,否则会报错,search则不用
temp=re.findall(r'(?<=(CAL_))(.+)(?=(_Val))', excle_line,re.I)
#前向界定?<=与后向界定?=,?表示最近匹配,不贪心,re.I表示去除结果里的空格和Tab
#前向界定和后向界定这个要加(),[]是表示[]的任一,()是全匹配,加的界定的返回值要注意类型
因为加了界定,导致返回的是一个元祖列表temp[0][1]
temp = re.search('line :',txt_line)
#re找到的结果是list,List用“”或None或[]或len(list[0])==0,判空不可行,可以直接用
if temp:#这种方式

re.findall(r'_'+string+'(.+?)_', txt_line)
前向界定和后向界定这个要加(),[]是表示[]的任一,()是全匹配,加的界定的返回值要注意类型
re匹配里加变量,是直接用‘+temp+’隔出来就可以,也可以用'+str(temp)+',
这个是里面的特殊字符不会被转义,若需要转义,则加'+re.escape(temp)+'

zip 压缩
python 压缩整个文件夹到指定路径
python 压缩

import zipfile
import os

def zip_files( Filepath, zip_name ):
    #filelist = os.listdir(Filepath)
    zip = zipfile.ZipFile( zip_name, 'w', zipfile.ZIP_DEFLATED)
    for root, dirs, files in os.walk(Filepath):
        fpath = root.replace(Filepath,'')#压缩包里不额外有路径
        fpath = fpath and fpath + os.sep or ''
        for file in files:
            zip.write(os.path.join(root,file),fpath+file)
            print ('compressing', file)

    zip.close()
    #print ('compressing finished')

files = 'D:\\user\\script'#文件的位置,多个文件用“,”隔开
zip_file = 'D:\\a.zip'#压缩包名字+路径
zip_files(files,zip_file)
#shutil.copytree("olddir","newdir")        olddir和newdir都只能是目录,且newdir必须不存在
下面是一些经验

try:可以加在任意处,可嵌套,try可省略
print()会增加很多运行时间,if判断会增加运行时间,要优化if判断的次数
re正则匹配返回的是一个lest,要加下标取值
表格和文件可以先读到内存里,再进行操作,这样能提高速度很多
合并框搜索匹配,只在第一行有值,下面行是None
去除字符串里的空格和Tab可以用.strip(),replace(),re.sub()
文本读完要将文件指针移回文件首
re返回的是列表,List,可能会有返回为空的情况,注意加判断

链接

使用openpyxl excel 合并拆分单元格
Python 正则表达式入门

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,458评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,454评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,171评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,062评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,440评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,661评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,906评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,609评论 0 200
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,379评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,600评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,085评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,409评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,072评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,088评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,860评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,704评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,608评论 2 270

推荐阅读更多精彩内容