简单实用小工具集
发布日期:2021-06-29 18:19:19 浏览次数:2 分类:技术文章

本文共 15615 字,大约阅读时间需要 52 分钟。

简述

该博文保存的都是日常使用的小工具集,自动化工作的好帮手,不定时更新。

获取文件路径

#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:CXKdef GetImgNameByEveryDir(file_dir,videoProperty):      # Input   Root Dir and get all img in per Dir.    # Out     Every img with its filename and its dir and its path      FileNameWithPath = []     FileName         = []    FileDir          = []    for root, dirs, files in os.walk(file_dir):          for file in files:              if os.path.splitext(file)[1] in videoProperty:                  FileNameWithPath.append(os.path.join(root, file)) # 保存图片路径                FileName.append(file)                             # 保存图片名称                FileDir.append(root[len(file_dir):])            # 保存图片所在文件夹    return FileName,FileNameWithPath,FileDir#获取C:\\video\\路径下的所有mp4文件,包括名称,路径,文件夹名称FileName,FileNameWithPath,FileDir=GetImgNameByEveryDir('C:\\video\\,'.mp4')

文件批量重命名

#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:CXKimport os,timefile_dir=r'C:\Users\Administrator\Desktop\test_video'i=1;for parent, dirnames, filenames in os.walk(file_dir):    for filename in filenames:        newName=str(i)+".mp4"        os.rename(os.path.join(parent, filename), os.path.join(parent, newName))        i=i+1    time.sleep(0.1)print('重命名完成!')

文件夹下文件数量统计

一个用来查看文件夹下各种文件的数量。

#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:CXKimport osimport globa=[]# 遍历文件夹def walkFile(file):    for root, dirs, files in os.walk(file):        if dirs!=[]:            for i in dirs:               #查找带有_xml的文件夹名,添加进列表                if '_xml'in i:                    a.append(i)#     print(a)    # 遍历所有的文件夹    b=[]    for d in a:        file_path=os.path.join(file, d)        path_file_number=glob.glob(file_path+os.sep+'*.xml') #获取当前文件夹下后缀为'.xml'的文件个数        #判断该文件夹下的文件是否小于600        if len(path_file_number)<600:            print("文件夹:%s,文件个数:%s"%(d,len(path_file_number)))            b.append(d)    print(b)if __name__ == '__main__':    walkFile(r"Y:\\Bilil_video")#     pass

多进程批量修改视频分辨率

#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:CXK# %%writefile 多进程视频分辨率修改.pyimport cv2,timeimport os,shutilfrom multiprocessing import Processfrom multiprocessing import Poolprint('opencv版本 - '+cv2.__version__)def GetImgNameByEveryDir(file_dir,videoProperty):      # Input   Root Dir and get all img in per Dir.    # Out     Every img with its filename and its dir and its path      FileNameWithPath = []     FileName         = []    FileDir          = []    for root, dirs, files in os.walk(file_dir):          for file in files:              if os.path.splitext(file)[1] in videoProperty:                  FileNameWithPath.append(os.path.join(root, file))  # 保存图片路径                FileName.append(file)                              # 保存图片名称                FileDir.append(root[len(file_dir):])               # 保存图片所在文件夹    return FileName,FileNameWithPath,FileDirdef deal_with_opencv(path,file_path):    #读取视频    video_capture = cv2.VideoCapture(FileNameWithPath[i])    video_size = (int(video_capture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT)))    total_frames = int(video_capture.get(cv2.CAP_PROP_FRAME_COUNT))    video_fps = int(video_capture.get(5))    print("视频像素 - Video size:{}".format(video_size))    print("视频总帧数 - Total_frame:{}".format(total_frames))    print("视频帧率 - Video_fps:{}".format(video_fps))    print("视频时长 - Video_long:{} s".format(total_frames/video_fps))    paths=path+os.sep+FileName[i]    videoWriter =cv2.VideoWriter(paths,cv2.VideoWriter_fourcc('M','P','4','V'),video_fps,new_size)    while True:        success,frame = video_capture.read()        if success:            frame = cv2.resize(frame,new_size, interpolation=cv2.INTER_LINEAR)            videoWriter.write(frame)        else:            break    print('%s--转为720P完成!\n'%paths)    def video_edit(path,new_size):    FileName,FileNameWithPath,FileDir=GetImgNameByEveryDir(path,'.mp4')    path=path+os.sep+'new_video'    if not os.path.exists(path):        os.makedirs(path)    else:        shutil.rmtree(path)        os.makedirs(path)    time_time=time.time()    # 设置进程池 最多10个进程    p = Pool(10)    for i in range(len(FileNameWithPath)):        try:            p.apply_async(deal_with_opencv,args=(path,FileNameWithPath[i]))        except Exception as e:            print(e)            continue    p.close()    p.join()    print("Run time: {} s".format(round(time.time() - time_time, 4)))if __name__ == '__main__':    video_edit('C:\\Users\\Administrator\\Desktop\\video',(1280,720))

多进程视频按帧转为图片

#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:CXKimport cv2,os,timefrom multiprocessing import Processfrom multiprocessing import Pool def GetNameByEveryDir(file_dir,videoProperty):      """[summary]    Args:        file_dir ([type]): [文件路径]        videoProperty ([type]): [文件类型]    Returns:        [type]: [文件名列表,文件路径列表,文件夹列表]    """    FileNameWithPath = []     FileName         = []    FileDir          = []    for root, dirs, files in os.walk(file_dir):          for file in files:              if os.path.splitext(file)[1] in videoProperty:                  FileNameWithPath.append(os.path.join(root, file))  # 保存图片路径                FileName.append(file)                              # 保存图片名称                FileDir.append(root[len(file_dir):])               # 保存图片所在文件夹    return FileName,FileNameWithPath,FileDirdef video_to_omg(file_name,file_name_with_path,img_save_dir,count):    """[summary]    Args:        file_name ([type]): 视频文件名        file_name_with_path ([type]): 视频文件路径        img_save_dir ([type]): 图片保存路径        count ([int]): 1秒几张图片    """    print('Child process %s (%s)Running...' %(file_name,os.getpid()))    videoLeftUp = cv2.VideoCapture(file_name_with_path)    fps = videoLeftUp.get(cv2.CAP_PROP_FPS)    count=int(fps/count) #帧率,用于跳帧处理    count_img=0    while (videoLeftUp.isOpened()):        retLeftUp, frameLeftUp = videoLeftUp.read()        if retLeftUp:            count_img+=1            if count_img%count==0:                # cv2.imshow(FileNameWithPath[j], frameLeftUp)                img_name=img_save_dir+os.sep+file_name[:-4]+"_"+str(count_img)+".jpg"                # print(img_name)                cv2.imwrite(img_name,frameLeftUp)        else:            break    count_img=0    videoLeftUp.release()    print('Child process %s (%s)Stoping...' %(file_name,os.getpid()))    if __name__ == '__main__':    time_time=time.time()    root_dir='Y:\\img_and_video_data\\video_data\\Bilil_video_2\\'    FileName,FileNameWithPath,FileDir = GetNameByEveryDir(root_dir,'.mp4')    # print(FileName)    # 设置进程池 最多10个进程    p = Pool(10)    # 多线程写入图片    for j in range(len(FileNameWithPath)):        try:            #保存图片文件夹名  默认视频文件夹下的视频名文件夹            img_save_dir=root_dir+FileName[j][:-4]            if not os.path.exists(img_save_dir):                os.makedirs(img_save_dir)            #多进程 未限制进程数            # p=Process(target=video_to_omg,args=(FileName[j],FileNameWithPath[j],img_save_dir,5))            # p.start()            #限制进程数            p.apply_async(video_to_omg,args=(FileName[j],FileNameWithPath[j],img_save_dir,5))        except Exception as e:            print(e)    p.close()    p.join()    print("Run time: {} s".format(round(time.time() - time_time, 4)))

批量jpg图片转为png

#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:CXKfrom PIL import  Imageimport ospath=r"C:\Users\Administrator\Desktop\cxk"  #图片所在的文件夹路径for maindir, subdir,file_name_list in os.walk(path):    for file_name in file_name_list:        image=os.path.join(maindir,file_name) #获取每张图片的路径        file=Image.open(image)        out=file.resize((640,640),Image.ANTIALIAS)  #以高质量修改图片尺寸        # 将jpg转换为png        png_name = str(image)[0:-len('.jpg')] + '.png'        out.save(png_name)

批量下载B站某UP主全部视频

#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:CXKimport requests,timeimport sys,osdef get_video_dict(mid,pn):    session=requests.session()    all_video={
} aid_list=[] for j in range(1,int(pn)+1): url="https://api.bilibili.com/x/space/arc/search?mid=%s&ps=30&tid=0&pn=%s&keyword=&order=pubdate&jsonp=jsonp"%(mid,str(j)) res=session.get(url) aid_list=[] for i in res.json()['data']['list']['vlist']: aid_list.append(i['aid']) all_video[str(j)]=aid_list return all_videodef get_cmd(url,path): os.system('you-get -o {path} {url}'.format(path=path,url=url))#使用os操作有个you-getdef get_video(all_video,path): for j in range(1,len(all_video)+1): for i in all_video[str(j)]: url = r'https://www.bilibili.com/video/%s%s'%("av",str(i)) try: get_cmd(url,path) print(url+"----下载完成") time.sleep(200) except Exception as e: print(url+"----下载出错,已跳过") print(e) time.sleep(200) continue print("第"+str(j)+"页----下载完成") if __name__=="__main__": path = r'C:/Users/Administrator/Desktop/test_video' #设置下载视频目录 mid="281*******" #下载的UP主id,up主详情页面的url上的一串数字 pn=28 #总共视频页面数 #第18页完成 all_video=get_video_dict(mid,pn) get_video(all_video,path)

睡眠排序(来自网上)

import time,randomimport threadingstart = time.perf_counter()# 你需要排序的序列(可以包含负数)num = [random.randint(-100,121) for i in range(10)]a=[]# 睡眠的方法def doSleep(func):    co = 0.02  # 添加系数让睡眠时间短一些    time.sleep(co * pow(1.1, float(func)))  # 使用幂函数就不怕负数排序了#     print(func)    a.append(func)# 将多个线程存在一个数组中thread_list = []for i in range(len(num)):    temp = threading.Thread(target=doSleep, args=(str(num[i]), ))    thread_list.append(temp)if __name__ == '__main__':    for t in thread_list:        t.start()  # 开启线程    for t in thread_list:        t.join()  # 所有子线程都结束了主线程才关闭    end = time.perf_counter()    print('用时:', str(end - start))    print(a)

c++写入txt文件

string value="I "; if (true){
ofstream out("C:/Users/Administrator/Desktop/result.txt", ios::app);out << value + "Love You" + "\n" << endl;out.close();}

python requests调用接口

import requests,jsondef get_data():    url = "https://www.cxkboke.top/getPoem"    data = {
'poemInfo': '李白', 'pagesize': 100, 'page':1, 'query':'None' } res=requests.post(url,data=json.dumps(data)) return res.json()['info']get_data()

文件夹比对

一个文件对应一个文件夹,该脚本比对文件夹有而文件没有

import osdef GetNameByEveryDir(file_dir,videoProperty):      """[summary]    Args:        file_dir ([type]): [文件路径]        videoProperty ([type]): [文件类型]    Returns:        [type]: [文件名列表,文件路径列表,文件夹列表]    """    FileNameWithPath = []     FileName         = []    FileDir          = []    for root, dirs, files in os.walk(file_dir):          for file in files:              if os.path.splitext(file)[1] in videoProperty:                  FileNameWithPath.append(os.path.join(root, file))  # 保存图片路径                FileName.append(file)                              # 保存图片名称                FileDir.append(root[len(file_dir):])               # 保存图片所在文件夹    return FileName,FileNameWithPath,FileDirFileName,FileNameWithPath,FileDir=GetNameByEveryDir("C:\\video",".mp4")dirct = 'C:\\video'dirList=[]fileList=[]files=os.listdir(dirct)  #文件夹下所有目录的列表# print('files:',files)for f in files:    if os.path.isdir(dirct + '/'+f):   #这里是绝对路径,该句判断目录是否是文件夹        dirList.append(f)    elif os.path.isfile(dirct + '/'+f):#这里是绝对路径,该句判断目录是否是文件        fileList.append(f[:-4])        # print("文件夹有:",dirList)# print("文件有:",fileList)#获取文件夹有 文件没有的集合list3=list(set(dirList).difference(set(fileList)))list4=list(set(fileList).difference(set(dirList)))print(list4)

XML空目标文件剔除

#coding:utf8import csvimport osimport sysimport timeimport randomimport argparseimport shutilfrom multiprocessing.dummy import Pool as ThreadPooltry:    import xml.etree.cElementTree as ETexcept ImportError:    import xml.etree.ElementTree as ETdef GetImgNameByEveryDir(file_dir,videoProperty):      FileNameWithPath = []     FileName         = []    FileDir          = []    # videoProperty=['.png','jpg','bmp']    for root, dirs, files in os.walk(file_dir):          for file in files:              if os.path.splitext(file)[1] in videoProperty:                  # print('root = {},dirs = {},file = {}'.format(root,dirs,file))                FileNameWithPath.append(os.path.join(root, file))  # 保存图片路径                FileName.append(file)                              # 保存图片名称                FileDir.append(root + '/')            # 保存图片所在文件夹    return FileName,FileNameWithPath,FileDirdef reMove(XmlDir):    FileName_XML,FileNameWithPath_XML,FileDir_XML = GetImgNameByEveryDir(XmlDir,['.xml'])    #print(FileDir_XML[0],FileDir_IMG[0])    for k in range(len(FileName_XML)):                xml_file_with_path = FileNameWithPath_XML[k]        tree = ET.parse(xml_file_with_path)        root = tree.getroot()        i = 0        for child in root.findall('object'):            if child !='':                i = i+ 1        if i ==0:            os.remove(xml_file_with_path)        Dir_ = './'XmlDir   = Dir_ + 'TEST/'reMove(XmlDir)

批量修改XML文件与JPG文件文件名

import osfrom xml.etree.ElementTree import parse, Elementimport xml.dom.minidom'''第一步,将xml文件和图片重新命名'''def GetImgNameByEveryDir(file_dir,videoProperty):      # Input   Root Dir and get all img in per Dir.    # Out     Every img with its filename and its dir and its path      FileNameWithPath = []     FileName         = []    FileDir          = []    for root, dirs, files in os.walk(file_dir):          for file in files:              if os.path.splitext(file)[1] in videoProperty:                  FileNameWithPath.append(os.path.join(root, file))  # 保存图片路径                FileName.append(file)                              # 保存图片名称                FileDir.append(root[len(file_dir):])               # 保存图片所在文件夹    return FileName,FileNameWithPath,FileDirimg_path="Y:/img_and_video_data/img_data/front_img_target_in_center/"laber_path='Y:/img_and_video_data/img_data/front_img_target_in_center_xml/'img_path_name=img_path.split("/")[-2]print(img_path_name)a,b,c=GetImgNameByEveryDir(laber_path,'.xml')# print(a)i=0for item in a:    try:        # print(item)        os.rename(os.path.join(img_path,item.split(".")[0]+".jpg"), os.path.join(img_path, img_path_name+"_"+str(i)+".jpg"))        os.rename(os.path.join(laber_path,item), os.path.join(laber_path, img_path_name+"_"+str(i)+".xml"))        dom = parse(os.path.join(laber_path, img_path_name+"_"+str(i)+".xml"))        root = dom.getroot()        for obj in root.iter('annotation'):            obj.find('filename').text = img_path_name+"_"+str(i)+".jpg"        dom.write(os.path.join(laber_path, img_path_name+"_"+str(i)+".xml"), xml_declaration=True)        i+=1        # break    except Exception as e:        print(e)        print(item)        continue

opencv多摄像头读取

import cv2import numpy as np ##选择摄像头videoLeftUp = cv2.VideoCapture(0)videoRightUp = cv2.VideoCapture(1) width = (int(videoLeftUp.get(cv2.CAP_PROP_FRAME_WIDTH)))height = (int(videoLeftUp.get(cv2.CAP_PROP_FRAME_HEIGHT)))width2 = (int(videoRightUp.get(cv2.CAP_PROP_FRAME_WIDTH)))height2 = (int(videoRightUp.get(cv2.CAP_PROP_FRAME_HEIGHT))) while (videoLeftUp.isOpened() or videoRightUp.isOpened()):    retLeftUp, frameLeftUp = videoLeftUp.read()    retRightUp, frameRightUp = videoRightUp.read()    if retLeftUp:        frameLeftUp = cv2.resize(frameLeftUp, (int(width), int(height)), interpolation=cv2.INTER_CUBIC)        cv2.imshow('first', frameLeftUp)    if retRightUp:        frameRightUp = cv2.resize(frameRightUp, (int(width2), int(height2)), interpolation=cv2.INTER_CUBIC)        cv2.imshow('second', frameRightUp)    key = cv2.waitKey(10)    if int(key) == 27:        breakvideoLeftUp.release()videoRightUp.release()cv2.destroyAllWindows()

转载地址:https://cxk-life.blog.csdn.net/article/details/111112211 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:caffe模型简单调用
下一篇:批量保存微信收藏的表情包

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月30日 14时02分02秒