python学习——各种模块argparse、os、sys、time、re、sched、函数体

news2024/11/28 15:54:27

python学习——各种模块argparse、os、sys、time、re、sched、函数体

  • 各种模块学习
    • 1. python脚本
    • 2. argparse模块:撰写帮助文档,命令行参数定义等
    • 3. os模块:用于文件/目录路径或名字的获取
    • 4. sys模块:用于对命令行参数进行获取处理
    • 5. time模块
    • 6. re模块:一个特别重要的字符串处理模块,与正则表达式共同使用
    • 7. 自定义函数

各种模块学习

python模块=perl模板=R包,别人写好的脚本程序,直接使用。你也可以自己写一个,后续学习。
pip install numpy 下载安装python包(一个命令行命令)
import numpy 导入numpy包(在python脚本或python交互界面中使用)
import numpy as np 导入numpy包,并重新命名为np

1. python脚本

在linux下,生成一个空白文件,命名为test.py(touch test.py)。使用vim进行编辑
这个文件最上面一行,通常是#!/usr/bin/python3,用于指定python解析器的位置。
情况一:
使用chmod 775 test.py,修改文件权限,使其可执行。如果这时,使用./test.py,则是使用这一行指定的解析器
情况二:
不修改文件权限,使用home/zhaohuiyao/miniconda3/bin/python3 ./test.py,则是使用命令前面指定解析器,与文件内指定无关

2. argparse模块:撰写帮助文档,命令行参数定义等

  1. 导入:import argparse
  2. 主要有三个函数:
    parser=argparse.ArgumentParser(),其中参数用于描述帮助文档
    parser.add_argument(),具体每一个参数的具体的信息,包括名称,类型,是否必须等等信息
    args=parser.parse_args(),将所有的参数添加到一起,后续使用args.参数名。
  3. 这些信息会在执行python test.py --help/-h时出现

** 直接上例子,这是一个通用模板,你的所有python脚本都可以这样写 **
touch test.py
vim编辑

#!/usr/bin/python3
#一个python测试脚本
import argparse               #导入模块

#将在该脚本帮助文档中显示,该python脚本撰写人和邮件
__author__='zhao huiyao'
__mail__='zhaohuiyao@snnu.edu.cn'

def main():
	parser=argparse.ArgumentParser(description='a python test script',formatter_class=argparse.RawDescriptionHelpFormatter,epilog='author:\t{0}\nmail:\t{1}'.format(__author__,__mail__))
	parser.add_argument('-i','--input',help='input a fa file',type=argparse.FileType('r'),dest='input',required=True)
	parser.add_argument('-o','--output',help='output directory',required=True)
	args=parser.parse_args()
	print(args)
	print(args.input);print(args.output)
#调用主函数
if __name__ == '__main__':
	main()

chmod 775 ./test.py
./test.py -h
./test.py -i test.fa -o ./
请添加图片描述

3. os模块:用于文件/目录路径或名字的获取

  1. 导入:import os
  2. 在python脚本中,__file__表示该python脚本文件以及你在调用该脚本使用的路径。例如:python3 ./gc.py,为.gc.py;python3 /home/zhaohuiyao/python/gc.py,为/home/zhaohuiyao/python/gc.py
  3. 主要函数
    os.path.basename():仅返回文件名字
    os.path.dirname():返回文件相对路径。提供的不同,则返回值不同
    os.path.abspath():返回路径或文件的绝对路径
    os.path.exists():判断路径是否存在
    os.path.splitext():对文件名进行切割,即以最后一个.为分割符。os.path.splitext(“test.fa”),得到一个元组(‘test’, ‘.fa’)。os.path.splitext(“test.fa”)[0]表示为test,即文件名。os.path.splitext(“test.fa.txt”),得到一个元组(‘test.fa’, ‘.txt’)。
    os.path.join():连接,生成一个新的路径。output1_name=os.path.join(args.output, “result.fa”)
    os.system():执行系统命令
    os.system(‘mkdir -p /home/zhaohuiyao/test/python/os/’) #在运行python脚本时,遇到该语句,则执行其中的命令。如果你的命令中有参数,使用format函数。os.system(‘cp {0} /home/zhaohuiyao/test.txt’.format( file1))。其中file1在前面已经定义。

** 直接上例子 **

#!/usr/bin/python3            							#python的位置
import os
file_name = os.path.basename(__file__)      			#python脚本文件名字
pydir = os.path.dirname(__file__)           			#python脚本文件相对路径,提供不同,则不同,一般直接取绝对路径
filedir = os.path.abspath(__file__)						#python脚本文件绝对路径
bindir = os.path.abspath(os.path.dirname(__file__))     #python所在目录绝对路径
print ('python脚本调用', __file__)						#调用python脚本文件是给的路径
print ('python脚本名字', file_name);print ('python脚本相对路径', pydir);print ('python脚本绝对路径', filedir);print ('python所在目录绝对路径', bindir)

请添加图片描述

4. sys模块:用于对命令行参数进行获取处理

  1. 导入:import sys
  2. sys.argv[]:表示命令行参数。执行python脚本:/usr/bin/python3 ./gc.py -i ./test.fa。其中sys.argv[0]:./gc.py;sys.argv[1]:-i;sys.argv[2]:./test.fa
    #现在直接用前面提到的argparse模块中的命令,不常使用了,见到认识即可

5. time模块

  1. 导入:import time
  2. 这个模块用于时间获取和转换,通常是用于标准化流程中日志文件的描述。
    我通常会在python流程脚本前面用到下面定义的两个函数,以方便自己在后续查看报错信息。
    tt=time.time(),这个时间是一个浮点数的值(1658979946.3368537),不是我们常见的时间。这里用time.strftime(“%Y-%m-%d %H:%M:%S”)(2022-07-28 11:45:46),这两个时间是一样的。常用就是这样,当然还有如%y:两位数的年丰;%l:12小时制等

time.sleep(),表示实现程序的延时。time.sleep(0.02):延时20毫秒。再运行下面的内筒

import sys
import os
import time
def std( level, message ):		
	now_time = time.strftime("%Y-%m-%d %H:%M:%S")
	string = '{0} - {1} - {2} - {3}\n'.format( now_time, file_name, level, message )		#一定格式的string
	if level == 'ERROR':
		sys.stderr.write( string )				#输出报错的string
	else:
		sys.stdout.write( string )				#输出正确的string

#判断文件或目录是否存在
def file_exists( file_or_dir ) :
	target = os.path.abspath( file_or_dir )
	if not os.path.exists( target ) :
		std( 'ERROR', '{0} is not exists , program EXIT'.format( target ) )
		sys.exit(0)                   #直接终止python脚本运行
	else :
		std( 'INFO', '{0} is exists'.format( target) )
		return target

def main():
	file_exists('/home/zhhuiyao/test/python/gc.py')			#已知该文件存在
	
if __name__ == '__main__':
	main()
#执行:/usr/bin/python3 ../python/test.py
#输出:2022-04-25 18:22:18 - test.py - INFO - /home/zhaohuiyao/test/python/gc.py is exists

6. re模块:一个特别重要的字符串处理模块,与正则表达式共同使用

  1. re.match(pattern, string),表示从字符串string的起始位置匹配一个模式pattern,如果不是起始位置匹配成功的话,match()就返回none。匹配成功re.match方法返回一个匹配的对象。
  2. re.compile(),用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
  3. re.split()函数。用正则表达式切割
    str1=“he llo w o rld”
    re.split(r’\s’,str1),用单个空白字符进行切割,得到列表[‘he’, ‘’, ‘llo’, ‘w’, ‘o’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘rld’]
    re.split(r’\s+‘,str1),用任意长度空白字符进行切割,得到列表[‘he’, ‘llo’, ‘w’, ‘o’, ‘rld’]
    re.split(r’\s.‘,str1),用任意长度空白字符进行切割,得到列表[‘he’, ‘llo’, ‘’, ‘’, ‘’, ‘’, ‘rld’]
    re.split(r’‘,str1),用任意长度空白字符进行切割,得到列表[’', ‘h’, ‘e’, ’ ', ’ ', ‘l’, ‘l’, ‘o’, ’ ', ‘w’, ’ ', ‘o’, ’ ', ’ ', ’ ', ’ ', ’ ', ’ ', ‘r’, ‘l’, ‘d’, ‘’]。单个字符切割,且前后各一个空白字符

7. 自定义函数

前面例子中就在自定义main主函数。
def 函数名(参数1,参数2,参数3,······):
函数体
return 变量1,变量2,······
情况一:
使用return指定函数返回值。例如
def sum(a,b):
c=a+b
return c
result=sum(1,2) 得到结果result=3
def sum(a,b):
c=a+b
d=a-b
return c.d
result=sum(1,2) 得到结果result[0]=3;result[1]=-1

情况二:
没有使用return函数,则不返回任何结果,但是函数体会运行,如果有文件生成之类,则会完成。;例如
def sum(a,b,file):
c=a+b
out1=open(file, ‘w’)
out1.write(“第一个数={};第二个数={};两数之和={}\n”.format( a,b,c))
out1.close()
sum(1,2,“/home/zhaohuiyao/Bioscript/test.txt”)
#会生成文件/home/zhaohuiyao/Bioscript/test.txt
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1069870.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

车企“新四化”之——安全高效的电动汽车和混动汽车高压测量方案

一 背景 汽车行业正经历着“新四化”从概念向实际转化的过程(新四化即电动化、智能化、网络化、共享化),各大车企也将调整发展布局,而混合动力及电动汽车自然就成为了主要关注点。 对于混合动力汽车(PHEV&#xff09…

ReentrantLock锁与AQS的联系

请先看——————>AQS的简单说明 ReentrantLock底层是基于AQS实现的,在并发编程中可以实现公平锁和非公平锁来对同步资源进行控制,默认是非公平锁,并且是可重入锁。 1.ReentrantLock的体系关联结构 2.构造方法 可以发现ReentrantLock…

Spring Security——基于前后端分离项目的使用(安全框架)

1.简介 Spring Security有一个过滤器链,也就是说原本在拦截器和过滤器里面做的事都可以用Spring Security完成,比如验证token和将用户id存入线程上下文局部变量等等。 入门案例 创建项目并勾选依赖 最基本的要这两个依赖即可 新建一个Controller层的…

Dubbo v Spring Cloud:两大技术栈如何选型?

Java全能学习面试指南:https://javaxiaobear.cn 提到微服务开源框架,不可不说的是 Dubbo 和 Spring Cloud,这两大框架应该是大家最熟悉的微服务解决方案,也是面试中的热点。今天我们梳理下 Dubbo 和 Spring Cloud 的应用特性&…

win10 U盘安装教程

一年内,第三次重装电脑了,我必须要写一份教程了。从制作U盘开始,到重装系统,全部都记录一下,以备不时之需。 首先,找一个U盘,如果U盘内有需要文件,请自行备份,因为这个U盘…

“双节”出游,VR智慧景区让你的旅游更具“心价比”

中秋国庆八天长假落幕,全国旅游消费市场人气旺、活力足,黄金周旅游消费的变化凝结成为新的文旅趋势,更多的游客会选择人少、景美、价优的错峰游,为了享受品质游玩,VR全景展示为众多游客带来旅游新体验,让你…

分类预测 | MATLAB实现KOA-CNN-BiLSTM开普勒算法优化卷积双向长短期记忆神经网络数据分类预测

分类预测 | MATLAB实现KOA-CNN-BiLSTM开普勒算法优化卷积双向长短期记忆神经网络数据分类预测 目录 分类预测 | MATLAB实现KOA-CNN-BiLSTM开普勒算法优化卷积双向长短期记忆神经网络数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现KOA-CNN-BiLST…

洗地机怎么选?2023年洗地机推荐

洗地机结合洗地、拖地、扫地的功能,在日常生活中备受关注,他能帮助我们更加节省时间和节省体力,但是面对参差不齐的洗地机市场如何选到适合自己的呢,下文整理了几款非常值得入手的性价比型号,供大家选择参考。 一、CE…

SpringBoot项目创建

创建SpringBoot项目: 选择maven项目,选择Java版本 选择springboot版本(这里随便选择,后面会进行更改,用不到这么高的版本),选择所需要的对应工具。 然后下一步即可。 配置修改 ,结构…

7346-2015 控制电机基本外形结构型式

声明 本文是学习GB-T 7346-2015 控制电机基本外形结构型式.pdf而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了控制电机的机座号、外形及安装尺寸、轴伸型式、出线方式、标记及铭牌。 本标准适用于各类控制电机(以下简称电机),其…

漏洞复现--中远麒麟堡垒机SQL注入

免责声明: 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

性能监控-微服务链路追踪skywalking搭建

中文文档:hong设置 (skyapm.github.cio) 参考:微服务链路追踪SkyWalking的介绍和部署_skywalking部署_技术闲聊DD的博客-CSDN博客 参考:链路追踪SkyWalking整合项目以及数据持久化_skywalking 持久化_技术闲聊DD的博客-CSDN博客 Liunx部署skywalking以…

python每日一练(2)

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

【debian 12】:debian系统切换中文界面

目录 目录 项目场景 基础参数 原因分析 解决方案 1.ctrlaltT 打开终端 2.查询当前语言环境(我的已经设置成了中文 zh_CN.UTF-8) 3.打开语言配置界面 4.最后一步:重启 不要放弃任何一个机会! 项目场景: 这两…

项目进展(十)-解决ADS1285在调试时出现的问题

一、解决大坑 在项目进展(九)-完善ADS1285代码这边博客中,看似解决了问题,可以去读数据,但是其实是给自己挖大坑,这边博客就是来填坑的。   首先呢,上篇博客说的是用0x12指令来读取数据&#…

Nebula图数据库

文章目录 摘要引言Nebula图数据库概述Nebula图数据库架构Nebula命令和语法详解连接到Nebula图数据库创建图空间使用图空间创建图插入节点数据插入边数据查询节点数据查询边数据 高级用法索引图计算数据导入和导出事务管理数据备份和恢复安全性管理 Nebula使用实例结论参考文献 …

SwiftUI Spacer() onTapGesture 无法触发

问题:点击这个黑色区域不会 print,黑色区域看上去刚好是 Spacer() 占据的区域 解决办法:不使用 onTapGesture,用 Button 包裹一下 Code: import SwiftUIstruct TestTap: View {var body: some View {NavigationStack {List {Sect…

【框架风格】解释器模式

1、描述 解释器框架风格(Interpreter Framework Style)是一种软件架构风格,其核心思想是构建一个解释器(Interpreter)来解释并执行特定领域或问题领域的语言或规则。以下是解释器框架风格的一些特点: 1. 领…

parameterType后面报红

第一种 :parameterType后面报红,点击file——settings 第二种:写全类名

三十、【进阶】B树的演变过程

1、索引结构 (1)二叉树 (2)B-Tree树 B-Tree树最大度数为5,代表每一个节点最多存储4个key(每个节点最多存储4个数据),5个指针(可以指向5个子节点)。 2、演变过程(最大度数为5) &…