Python实用脚本有哪些
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容主要讲解"Python实用脚本有哪些",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Python实用脚本有哪些"吧!1.解决 linux 下 unz
千家信息网最后更新 2026年10月31日Python实用脚本有哪些
本篇内容主要讲解"Python实用脚本有哪些",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Python实用脚本有哪些"吧!
1.解决 linux 下 unzip 乱码的问题。
import osimport sysimport zipfileimport argparses = '\x1b[%d;%dm%s\x1b[0m' def unzip(path): file = zipfile.ZipFile(path,"r") if args.secret: file.setpassword(args.secret) for name in file.namelist(): try: utf8name=name.decode('gbk') pathname = os.path.dirname(utf8name) except: utf8name=name pathname = os.path.dirname(utf8name) #print s % (1, 92, ' >> extracting:'), utf8name #pathname = os.path.dirname(utf8name) if not os.path.exists(pathname) and pathname != "": os.makedirs(pathname) data = file.read(name) if not os.path.exists(utf8name): try: fo = open(utf8name, "w") fo.write(data) fo.close except: pass file.close()def main(argv): ###################################################### # for argparse p = argparse.ArgumentParser(description='解决unzip乱码') p.add_argument('xxx', type=str, nargs='*', \ help='命令对象.') p.add_argument('-s', '--secret', action='store', \ default=None, help='密码') global args args = p.parse_args(argv[1:]) xxx = args.xxx for path in xxx: if path.endswith('.zip'): if os.path.exists(path): print s % (1, 97, ' ++ unzip:'), path unzip(path) else: print s % (1, 91, ' !! file doesn\'t exist.'), path else: print s % (1, 91, ' !! file isn\'t a zip file.'), pathif __name__ == '__main__': argv = sys.argv main(argv)2.统计当前根目录代码行数。
# coding=utf-8import osimport time# 设定根目录basedir = './'filelists = []# 指定想要统计的文件类型whitelist = ['cpp', 'h']#遍历文件, 递归遍历文件夹中的所有def getFile(basedir): global filelists for parent,dirnames,filenames in os.walk(basedir): for filename in filenames: ext = filename.split('.')[-1] #只统计指定的文件类型,略过一些log和cache文件 if ext in whitelist: filelists.append(os.path.join(parent,filename))#统计一个的行数def countLine(fname): count = 0 # 把文件做二进制看待,read. for file_line in open(fname, 'rb').readlines(): if file_line != '' and file_line != '\n': #过滤掉空行 count += 1 print (fname + '----' , count) return countif __name__ == '__main__' : startTime = time.clock() getFile(basedir) totalline = 0 for filelist in filelists: totalline = totalline + countLine(filelist) print ('total lines:',totalline) print ('Done! Cost Time: %0.2f second' % (time.clock() - startTime))3.扫描当前目录和所有子目录并显示大小。
import osimport sys try: directory = sys.argv[1] except IndexError: sys.exit("Must provide an argument.")dir_size = 0 fsizedicr = {'Bytes': 1, 'Kilobytes': float(1) / 1024, 'Megabytes': float(1) / (1024 * 1024), 'Gigabytes': float(1) / (1024 * 1024 * 1024)}for (path, dirs, files) in os.walk(directory): for file in files: filename = os.path.join(path, file) dir_size += os.path.getsize(filename) fsizeList = [str(round(fsizedicr[key] * dir_size, 2)) + " " + key for key in fsizedicr] if dir_size == 0: print ("File Empty") else: for units in sorted(fsizeList)[::-1]: print ("Folder Size: " + units)4.将源目录240天以上的所有文件移动到目标目录。
import shutilimport sysimport timeimport osimport argparseusage = 'python move_files_over_x_days.py -src [SRC] -dst [DST] -days [DAYS]'description = 'Move files from src to dst if they are older than a certain number of days. Default is 240 days'args_parser = argparse.ArgumentParser(usage=usage, description=description)args_parser.add_argument('-src', '--src', type=str, nargs='?', default='.', help='(OPTIONAL) Directory where files will be moved from. Defaults to current directory')args_parser.add_argument('-dst', '--dst', type=str, nargs='?', required=True, help='(REQUIRED) Directory where files will be moved to.')args_parser.add_argument('-days', '--days', type=int, nargs='?', default=240, help='(OPTIONAL) Days value specifies the minimum age of files to be moved. Default is 240.')args = args_parser.parse_args()if args.days < 0: args.days = 0src = args.src # 设置源目录dst = args.dst # 设置目标目录days = args.days # 设置天数now = time.time() # 获得当前时间if not os.path.exists(dst): os.mkdir(dst)for f in os.listdir(src): # 遍历源目录所有文件 if os.stat(f).st_mtime < now - days * 86400: # 判断是否超过240天 if os.path.isfile(f): # 检查是否是文件 shutil.move(f, dst) # 移动文件5.扫描脚本目录,并给出不同类型脚本的计数。
import os import shutil from time import strftime logsdir="c:\logs\puttylogs" zipdir="c:\logs\puttylogs\zipped_logs" zip_program="zip.exe" for files in os.listdir(logsdir): if files.endswith(".log"): files1=files+"."+strftime("%Y-%m-%d")+".zip" os.chdir(logsdir) os.system(zip_program + " " + files1 +" "+ files) shutil.move(files1, zipdir) os.remove(files)6.下载Leetcode的算法题。
import sysimport reimport osimport argparseimport requestsfrom lxml import html as lxml_htmltry: import htmlexcept ImportError: import HTMLParser html = HTMLParser.HTMLParser()try: import cPickle as pkexcept ImportError: import pickle as pkclass LeetcodeProblems(object): def get_problems_info(self): leetcode_url = 'https://leetcode.com/problemset/algorithms' res = requests.get(leetcode_url) if not res.ok: print('request error') sys.exit() cm = res.text cmt = cm.split('tbody>')[-2] indexs = re.findall(r'(\d+) ', cmt) problem_urls = ['https://leetcode.com' + url \ for url in re.findall( r'(.+?)", cmt) tinfos = zip(indexs, levels, problem_urls) assert (len(indexs) == len(problem_urls) == len(levels)) infos = [] for info in tinfos: res = requests.get(info[-1]) if not res.ok: print('request error') sys.exit() tree = lxml_html.fromstring(res.text) title = tree.xpath('//meta[@property="og:title"]/@content')[0] description = tree.xpath('//meta[@property="description"]/@content') if not description: description = tree.xpath('//meta[@property="og:description"]/@content')[0] else: description = description[0] description = html.unescape(description.strip()) tags = tree.xpath('//div[@id="tags"]/following::a[@class="btn btn-xs btn-primary"]/text()') infos.append( { 'title': title, 'level': info[1], 'index': int(info[0]), 'description': description, 'tags': tags } ) with open('leecode_problems.pk', 'wb') as g: pk.dump(infos, g) return infos def to_text(self, pm_infos): if self.args.index: key = 'index' elif self.args.title: key = 'title' elif self.args.tag: key = 'tags' elif self.args.level: key = 'level' else: key = 'index' infos = sorted(pm_infos, key=lambda i: i[key]) text_template = '## {index} - {title}\n' \ '~{level}~ {tags}\n' \ '{description}\n' + '\n' * self.args.line text = '' for info in infos: if self.args.rm_blank: info['description'] = re.sub(r'[\n\r]+', r'\n', info['description']) text += text_template.format(**info) with open('leecode problems.txt', 'w') as g: g.write(text) def run(self): if os.path.exists('leecode_problems.pk') and not self.args.redownload: with open('leecode_problems.pk', 'rb') as f: pm_infos = pk.load(f) else: pm_infos = self.get_problems_info() print('find %s problems.' % len(pm_infos)) self.to_text(pm_infos)def handle_args(argv): p = argparse.ArgumentParser(description='extract all leecode problems to location') p.add_argument('--index', action='store_true', help='sort by index') p.add_argument('--level', action='store_true', help='sort by level') p.add_argument('--tag', action='store_true', help='sort by tag') p.add_argument('--title', action='store_true', help='sort by title') p.add_argument('--rm_blank', action='store_true', help='remove blank') p.add_argument('--line', action='store', type=int, default=10, help='blank of two problems') p.add_argument('-r', '--redownload', action='store_true', help='redownload data') args = p.parse_args(argv[1:]) return argsdef main(argv): args = handle_args(argv) x = LeetcodeProblems() x.args = args x.run()if __name__ == '__main__': argv = sys.argv main(argv)7.将 Markdown 转换为 HTML。
import sysimport osfrom bs4 import BeautifulSoupimport markdownclass MarkdownToHtml: headTag = '' def __init__(self,cssFilePath = None): if cssFilePath != None: self.genStyle(cssFilePath) def genStyle(self,cssFilePath): with open(cssFilePath,'r') as f: cssString = f.read() self.headTag = self.headTag[:-7] + ''.format(cssString) + self.headTag[-7:] def markdownToHtml(self, sourceFilePath, destinationDirectory = None, outputFileName = None): if not destinationDirectory: # 未定义输出目录则将源文件目录(注意要转换为绝对路径)作为输出目录 destinationDirectory = os.path.dirname(os.path.abspath(sourceFilePath)) if not outputFileName: # 未定义输出文件名则沿用输入文件名 outputFileName = os.path.splitext(os.path.basename(sourceFilePath))[0] + '.html' if destinationDirectory[-1] != '/': destinationDirectory += '/' with open(sourceFilePath,'r', encoding='utf8') as f: markdownText = f.read() # 编译出原始 HTML 文本 rawHtml = self.headTag + markdown.markdown(markdownText,output_format='html5') # 格式化 HTML 文本为可读性更强的格式 beautifyHtml = BeautifulSoup(rawHtml,'html5lib').prettify() with open(destinationDirectory + outputFileName, 'w', encoding='utf8') as f: f.write(beautifyHtml)if __name__ == "__main__": mth = MarkdownToHtml() # 做一个命令行参数列表的浅拷贝,不包含脚本文件名 argv = sys.argv[1:] # 目前列表 argv 可能包含源文件路径之外的元素(即选项信息) # 程序最后遍历列表 argv 进行编译 markdown 时,列表中的元素必须全部是源文件路径 outputDirectory = None if '-s' in argv: cssArgIndex = argv.index('-s') +1 cssFilePath = argv[cssArgIndex] # 检测样式表文件路径是否有效 if not os.path.isfile(cssFilePath): print('Invalid Path: '+cssFilePath) sys.exit() mth.genStyle(cssFilePath) # pop 顺序不能随意变化 argv.pop(cssArgIndex) argv.pop(cssArgIndex-1) if '-o' in argv: dirArgIndex = argv.index('-o') +1 outputDirectory = argv[dirArgIndex] # 检测输出目录是否有效 if not os.path.isdir(outputDirectory): print('Invalid Directory: ' + outputDirectory) sys.exit() # pop 顺序不能随意变化 argv.pop(dirArgIndex) argv.pop(dirArgIndex-1) # 至此,列表 argv 中的元素均是源文件路径 # 遍历所有源文件路径 for filePath in argv: # 判断文件路径是否有效 if os.path.isfile(filePath): mth.markdownToHtml(filePath, outputDirectory) else: print('Invalid Path: ' + filePath)8.文本文件编码检测与转换。
import sysimport osimport argparsefrom chardet.universaldetector import UniversalDetectorparser = argparse.ArgumentParser(description = '文本文件编码检测与转换')parser.add_argument('filePaths', nargs = '+', help = '检测或转换的文件路径')parser.add_argument('-e', '--encoding', nargs = '?', const = 'UTF-8', help = '''目标编码。支持的编码有:ASCII, (Default) UTF-8 (with or without a BOM), UTF-16 (with a BOM),UTF-32 (with a BOM), Big5, GB2312/GB18030, EUC-TW, HZ-GB-2312, ISO-2022-CN, EUC-JP, SHIFT_JIS, ISO-2022-JP,ISO-2022-KR, KOI8-R, MacCyrillic, IBM855, IBM866, ISO-8859-5, windows-1251, ISO-8859-2, windows-1250, EUC-KR,ISO-8859-5, windows-1251, ISO-8859-1, windows-1252, ISO-8859-7, windows-1253, ISO-8859-8, windows-1255, TIS-620''')parser.add_argument('-o', '--output', help = '输出目录')# 解析参数,得到一个 Namespace 对象args = parser.parse_args()# 输出目录不为空即视为开启转换, 若未指定转换编码,则默认为 UTF-8if args.output != None: if not args.encoding: # 默认使用编码 UTF-8 args.encoding = 'UTF-8' # 检测用户提供的输出目录是否有效 if not os.path.isdir(args.output): print('Invalid Directory: ' + args.output) sys.exit() else: if args.output[-1] != '/': args.output += '/'# 实例化一个通用检测器detector = UniversalDetector()print()print('Encoding (Confidence)',':','File path')for filePath in args.filePaths: # 检测文件路径是否有效,无效则跳过 if not os.path.isfile(filePath): print('Invalid Path: ' + filePath) continue # 重置检测器 detector.reset() # 以二进制模式读取文件 for each in open(filePath, 'rb'): # 检测器读取数据 detector.feed(each) # 若检测完成则跳出循环 if detector.done: break # 关闭检测器 detector.close() # 读取结果 charEncoding = detector.result['encoding'] confidence = detector.result['confidence'] # 打印信息 if charEncoding is None: charEncoding = 'Unknown' confidence = 0.99 print('{} {:>12} : {}'.format(charEncoding.rjust(8), '('+str(confidence*100)+'%)', filePath)) if args.encoding and charEncoding != 'Unknown' and confidence > 0.6: # 若未设置输出目录则覆盖源文件 outputPath = args.output + os.path.basename(filePath) if args.output else filePath with open(filePath, 'r', encoding = charEncoding, errors = 'replace') as f: temp = f.read() with open(outputPath, 'w', encoding = args.encoding, errors = 'replace') as f: f.write(temp)到此,相信大家对"Python实用脚本有哪些"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
文件
目录
检测
路径
输出
脚本
源文件
编码
有效
实用
文本
检测器
统计
元素
文件名
源目录
目标
类型
乱码
二进制
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
保险科技 互联网保险
河南云网互联网络科技有限公司
科技互联网项目
互联网科技有限公司图片
互联网下的科技发展
腾讯阿里互联网科技
科技创新互联网企业
互联网科技网站
中国互联网金融科技基金
科技大学互联网专业好不好
互联网 科技馆
湖南洣水互联网科技有限公司扣款
科技与互联网的利与弊
青岛中康互联网医疗科技有限公司
广州恒生互联网科技有限
互联网科技年终奖
瑞安市蟠桃会互联网科技有限公司
互联网科技创新方面的资料
伍佰万互联网科技是干嘛的
如何强化互联网金融科技
鸠鸠互联网科技
远拓互联网科技
无线互联网科技
人人互联网科技是培训
互联网科技产品
小米互联网科技园设置
荆州市昕露互联网络科技有限公司
风投北京互联网科技
福州德业互联网科技
优雇互联网科技有限公司