1,递归提取 .c和.h的文件
def getchfilelist(input_fp):
file_list=[]
pathdir = os.listdir(input_fp)#将目录下所有文件名返回成列表
for s in pathdir:
# print(s)
newdir = os.path.join(input_fp,s)#将路径和文件名拼接起来
if os.path.isfile(newdir):
if os.path.splitext(newdir)[1]== '.c' or os.path.splitext(newdir)[1]== '.h':
file_list.append(newdir)
elif os.path.isdir(newdir):
if getchfilelist(newdir):
file_list.append(getchfilelist(newdir))
# print("done")
return(file_list)
2,生成文本文件
按行写文件
with open(in_name,"w",encoding="utf-8") as file:#自动调用文件的关闭
for i in range(len(in_content)):
file.write(in_content[i]+"\n")
多行一起写文件
# with open('test.csv',"w",newline='') as file:#自动调用文件的关闭
# writer = csv.writer(file)
# writer.writerows(zip(var_raw,var_type_fianl))
3,读取文件
def getcontent(filepath):
lines_new=[]
try:
with open(filepath,"r", encoding='utf-8') as file:#自动调用文件的关闭
lines_raw = file.readlines()
[lines_new.append(x.strip("\n")) for x in lines_raw]
# for x in lines_raw:
# y = x.strip("\n") # 去掉每一行末尾的换行符
# lines_new.append(y)
return(lines_new)
except:
with open(filepath,"r", encoding='gbk') as file:#自动调用文件的关闭
lines_raw = file.readlines()
[lines_new.append(x.strip("\n")) for x in lines_raw]
# for x in lines_raw:
# y = x.strip("\n") # 去掉每一行末尾的换行符
# lines_new.append(y)
return(lines_new)
4,打开多层列表
def open_list(lst,lis=[]):
[open_list(x) if type(x) is list else lis.append(x) for x in lst]
return(lis)
5,OS,复制、创建、删除文件
shutil.copy(in_filepath,targetpath):复制文件
shutil.move(rawpath[i], tarpath[i])#移动文件
os.makedirs(in_reult_path) 创建文件夹
os.listdir(in_reult_path) 列举处文件夹下的所有文件,返回的是列表
os.path.join(in_reult_path,list_raw[-1]) 路径拼接
shutil.rmtree("test")#删除非空文件夹
os.getcwd():获取当前路径
import os
dirs = '/python/'
if not os.path.exists(dirs):#判断文件夹是否存在
os.makedirs(dirs)
filename=''/python/test.py'
if not os.path.exists(filename):#判断文件是否存在
os.system(r"touch {}".format(path))#调用系统命令行来创建文件
6,字符串
str1= str1.replace('old','new') #替换字符串内的某些内容
str2=' /* ECU_ADDRESS */ {}'.format(address_list[i])#在字符串某个地方插入内容
检查是否是纯数字
myStr1 = 'python123' myStr2 = '123456'
print(myStr1.isdigit())# False print(myStr2.isdigit())# True
isalpha()如果字符串至少有一个字符并且所有字符都是字母则返回True,否则返回False
endswith()检查字符串是否是以指定子串结尾,是则返回True,否则返回False。如果设置开始和结束位置下标,则在指定范围内检查
startswith()检查字符串是否是以指定子串开头,是则返回True,否则返回False。如果设置开始和结束位置下标,则在指定范围内检查。
string.title(),将字符串中的每个单词首字母大写,其余变为小写
string.captialize(),将字符串中的首字母大写,其余变为小写
string.upper(),将字符串中的所有字母变为大写
string.lower(),将字符串中的所有字母变为小写
string.swapcase(),将字符串中的大写字母变为小写,小写字母变为大写。
string.center 居中
string.ljust(10)字符串左对齐,右侧填充10个空格
string.rjust右对齐
string.zfill填充补0
7,表格操作
xlrd
读取xls格式
workbook = xlrd.open_workbook(XLSpath)
sheet_0 = workbook.sheet_by_name('MBD')
# print(sheet_0.nrows)
# print(sheet_0.ncols)
# print(sheet_0.cell(1,1).value)##index从0开始
# # sheet_count = len(workbook.sheets())
Openpyxl
wb = openpyxl.load_workbook(filename, data_only=True)
读取xlsx格式
workbook = openpyxl.load_workbook(input_file)
sheet_matrix = workbook["Matrix"]
print("最大列数",sheet_matrix.max_column)
print("最大行数",sheet_matrix.max_row)
print("单元格的值",sheet_matrix.cell(1,2).value)#索引值从1开始
def read_excel_xlsx(path, sheet_name):
workbook = openpyxl.load_workbook(path)
sheet = workbook[sheet_name]
for row in sheet.rows:
for cell in row:
print(cell.value, "\t", end="")
print()
写xlsx格式表格
def write_excel_xlsx(path, sheet_name, value):
index = len(value)
workbook = openpyxl.Workbook()
sheet = workbook.active
sheet.title = sheet_name
for i in range(0, index):
for j in range(0, len(value[i])):
sheet.cell(row=j+1, column=i+1, value=str(value[i][j]))
workbook.save(path)
print("xlsx格式表格写入数据成功!")
##########
def main():
book_name_xlsx = 'xlsx格式测试工作簿.xlsx'
sheet_name_xlsx = 'xlsx格式测试表'
value3 = [["第一列", "第一列", "第一列", "第一列", "第一列"],
["第二列", "女", "gg", "家庄", "程师"],
["第三列", "男", "gg", "京", "老板"],
["第四列", "女", "gg", "州", "保安"]]
write_excel_xlsx(book_name_xlsx, sheet_name_xlsx, value3)
8,参数输入
import argparse
parser=argparse.ArgumentParser()
parser.add_argument("projectname")
args=parser.parse_args()
param=vars(args)
v={}
for key,value in param.items():
v[key]=value
project_name = v["projectname"]
print('外部参数project_name:',project_name)
9,报错信息
错误类型:
1. NameError:尝试访问一个未申明的变量
2. ZeroDivisionError:除数为0
3. SyntaxError:语法错误
4. IndexError:索引超出范围
5. KeyError:字典关键字不存在
6. IOError:输入输出错误
7. AttributeError:访问未知对象属性
8.ValueError:数值错误
9. TypeError:类型错误
10. AssertionError:断言错误
MemoryError:内存耗尽异常
12. NotImplementedError:方法没实现引起的异常
13. LookupError:键、值不存在引发的异常
14. StandardError 标准异常
语法
try:
尝试执行的语句
except:
出错误后执行的语句
except TypeError:#也可以在这加上错误类型
finally:
无论执行是否成功,都执行这个语句
主动抛出异常
try:
a=1/0
except:
ex = Exception('这是自定义的异常')
raise ex
raise RuntimeError("Python 3.5 orlater is required")
10,log
from loguru import logger
@logger.catch()#装饰器,可以打印出traceback
def main():
logger.add("log/runtime_{time}.log", rotation="500 MB") # 文件过大于500M就会重新生成一个文件
# logger.add("runtime_{time}.log", rotation="00:00") # 每天0点创建新文件
# logger.add("runtime_{time}.log", rotation="1 week") # 文件每过一周就会创建新文件
logger.add("test_4.log", retention="5 da+ys") # 只保留最近五天的日志文件
logger.add("test_5.log", compression="zip") # 以zip格式对日志进行保存
logger.debug("debug message")
logger.info("info level message")
logger.warning("warning level message")
logger.critical("critical level message")
11 python 调用shell 使用exe文件
subprocess模块简介
subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。
这个模块用来创建和管理子进程。它提供了高层次的接口,用来替换os.system*()、 os.spawn*()、 os.popen*()、os,popen2.*()和commands.*等模块和函数。
subprocess提供了一个名为Popen的类启动和设置子进程的参数,由于这个类比较复杂, subprocess还提供了若干便利的函数,这些函数都是对Popen类的封装。
subprocess.ca11(args, *, stdin=None, stdout=None, stderr=None, she11=False)
#运行由args参数提供的命令,等待命令执行结束并返回返回码。args参数由字符串形式提供且有多个命令参数时,需要提供shell=True参数
例子:
def video2File(video,framesDir,ffmpegCmd):
curVideoFrameOut=framesDir+"_%04d.jpg"
video2framesCmd = ffmpegCmd + " -i " + video + " -f image2 -vf fps=fps=30 -qscale:v 2 " +curVideoFrameOut
subprocess.call(video2framesCmd, shell=True)
if __name__ == "__main__":
ffmpegCmd = "D://SWPACK//ffmpeg//bin//ffmpeg.exe" #ffmpeg 路径
frameDir = r"\Desktop\专利\image\im" #存放图像序列路径
videopath=r"\Desktop\专利\20KW进气歧管水滴.mp4" #存放视频路径
video2File(videopath,frameDir,ffmpegCmd)
12:进制转化
int('0xf',16) #16进制转化为10进制
int('10100111110',2) #2进制转化为10进制
int('17',8) #8进制转化为10进制
hex(1033) #10进制转化为16进制
bin(10)#10进制转化为2进制
oct(11)#10进制转化为8进制
13,时间
import datetime
print(datetime.datetime.now()) #取当前时间
print(datetime.datetime.now().year) #取年
print(datetime.datetime.now().month) #取月
print(datetime.datetime.now().day) #取日
print(datetime.datetime.now().hour) #取时
print(datetime.datetime.now().minute) #取分
print(datetime.datetime.now().second) #取秒
import time
print(time.strftime('%Y_%m_%d', time.localtime(time.time()))) # 格式化获取年月日
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身