python 常用函数

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 当前时区的名称

%% %号本身

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值