简单实用小工具集
发布日期: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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月30日 14时02分02秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
容器管理大战:Kubernetes vs.Docker Swarm与Amazon ECS
2019-04-29
Java应用程序中的性能改进:ORM / JPA
2019-04-29
Kafka主题体系架构-复制、故障转移和并行处理
2019-04-29
怎么进行负载测试?
2019-04-29
很全!浅谈几种常用负载均衡架构
2019-04-29
java 性能调优:35 个小细节,让你提升 java 代码的运行效率
2019-04-29
软件开发人员维护代码指南
2019-04-29
2019年一线大厂20个长问mongo面试题和答案
2019-04-29
你写的代码好像一条虫啊!
2019-04-29
这54个docker命令!你必须懂!
2019-04-29
2019阿里巴巴面试题+答案
2019-04-29
30张地图看懂世界格局,用大数据说话
2019-04-29
性能调优思路
2019-04-29
腾讯离职,迪士尼给发了offer
2019-04-29
震惊了!关于JAVA复习的最佳敏捷实践!进BAT就是个毛毛雨!
2019-04-29
Java自动驾驶:汽车检测
2019-04-29
百度程序员:经理让背一个绩效4的名额,才批准离职!
2019-04-29
美团Java面试154道题分享!
2019-04-29
花了一个星期,我终于把RPC框架整明白了!
2019-04-29
什么是容器云?
2019-04-29