发布网友 发布时间:2024-09-07 10:02
共1个回答
热心网友 时间:2024-10-31 04:38
导读:很多朋友问到关于单个python脚本多少行合适的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!
写一个python脚本,要求支持从文本文件里面随机抽取若干行,写入新的文本文件里面。importrandom
oldf=open('oldfile','r')#打开原文件
newf=open('newfile','w')#打开要写入文件
lines=oldf.readlines()#原文件行列表
randline=random.randint(0,len(lines))#若干行
foriinxrange(0,randline):
newf.write(lines[random.randint(0,len(lines))])#写入新文件随机行
oldf.close()
newf.close()
python怎么运行py文件windows把路径换到E:\Medieval才行吧,先在命令行输入E:,然后输入cdMedieval。
Python:
Python(英语发音:/?pa?θ?n/),是一种面向对象、解释型计算机程序设计语言,由Guidovan
Rossum于1989年底发明,第一个公开发行版发行于1991年,Python源代码同样遵循
GPL(GNUGeneralPublicLicense)协议。Python语法简洁而清晰,具有丰富和强大的类库。
它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一
起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),
然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能
要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是
在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。
Python如何写脚本?Python写脚本步骤如下:
1、首先下载安装python,建议安装2.7版本以上。
2、打开文本编辑器,推荐editplus,notepad等,将文件保存成.py格式,editplus和notepad支持识别python语法。脚本第一行一定要写上#!usr/bin/python,表示该脚本文件是可执行python脚本,如果您的python目录不在usr/bin目录下,则替换成当前python执行程序的目录。
3、编写完脚本之后注意调试、可以直接用editplus调试。调试方法可自行百度。脚本写完之后,打开CMD命令行,前提是python已经被加入到环境变量中。
4、在CMD命令行中,输入“python”+“空格”,即”python“;将已经写好的脚本文件拖拽到当前光标位置,然后敲回车运行即可。
python读取文件内最多多少行字符1048576行。python读取文件内最多1048576行字符。Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为平台上写脚本和快速开发应用的编程语言。
用python跑一个小脚本,要吃多少内存可以检测一下
工作中需要根据某个应用程序具体吃了多少内存来决定执行某些操作,所以需要写个小工具来模拟应用程序使用内存情况,下面是我写的一个Python脚本的实现。
#!/usr/bin/python
#-*-coding:utf-8-*-
importsys
importre
importtime
defprint_help():
print'Usage:'
print'pythonmem.py100MB'
print'pythonmem.py1GB'
if__name__=="__main__":
iflen(sys.argv)==2:
pattern=re.compile('^(\d*)([M|G]B)$')
match=pattern.match(sys.argv[1].upper())
ifmatch:
num=int(match.group(1))
unit=match.group(2)
ifunit=='MB':
s=''*(num*1024*1024)
else:
s=''*(num*1024*1024*1024)
time.sleep(10000)
else:
print_help()
else:
print_help()
使用方法如下:
pythonmem.py100M
pythonmem.py1G1212
Linux下Python脚本编写的quot;奇技淫巧quot;「生命完美的答案,无非走过没有遗憾---《天蓝》」
「如何能够解析脚本运行命令行选项(位于sys.argv中)」
argparse模块可被用来解析命令行选项
常用来定义一个脚本的说明文档,一般我们写python脚本会通过if..else的方式来提供一个脚本说明文档,python不支持switch。所以很麻烦,其实,我们可以通过argparse来编写说明文档。
我们来看看怎么执行一个python脚本
对于熟悉Linux的小伙伴下面的文档在熟悉不过了,这个一个标准Linxu软件包的说明文档,文档中定义是软件包的说明
来看看这个脚本是如何编写的
为了解析命令行选项,首先要创建一个ArgumentParser实例,使用add_argument()方法声明你想要支持的选项。在每个add-argument()调用中:
dest参数指定解析结果被指派给属性的名字。metavar参数被用来生成帮助信息。
action参数指定跟属性对应的处理逻辑,通常的值为store,被用来存储某个值或将多个参数值收集到一个列表中。
nargs参数收集所有剩余的命令行参数到一个列表中。在本例中它被用来构造一个文件名列表
action='store_true'根据参数是否存在来设置一个位置Boolean标志:
action='store'参数接受一个单独值并将其存储为一个字符串
如果一个都没有,会提示缺少参数-p/--pat
choices={'slow','fast'},参数说明接受一个值,但是会将其和可能的选择值做比较,以检测其合法性:
一旦参数选项被指定,你就可以执行parser.parse()方法了。它会处理sys.argv的值并返回一个结果实例。每个参数值会被设置成该实例中add_argument()方法的dest参数指定的属性值。
还很多种其他方法解析命令行选项。可以会手动地处理sys.argv或者使用getopt模块。但是,如果你采用本节的方式,将会减少很多冗余代码,底层细节argparse模块已经帮你处理好了。你可能还会碰到使用optparse库解析选项的代码。尽管optparse和argparse很像,但是后者更先进,因此在新的程序中你应该使用它。
「你写了个脚本,运行时需要一个密码。此脚本是交互式的,因此不能将密码在脚本中硬编码,而是需要弹出一个密码输入提示,让用户自己输入。」
Python的getpass模块正是你所需要的。你可以让你很轻松地弹出密码输入提示,并且不会在用户终端显示密码。
代码中getpass.getuser()不会弹出用户名的输入提示。它会根据该用户的shell环境或者会依据本地系统的密码库(支持pwd模块的平台)来使用当前用户的登录名
在bash中编写pytohn脚本接收外部数据的方式,一般情况下,对于一般变量,我们用命令行变量的方式比较多(手动的处理sys.argv),对于文件内容或者bash命令输出直接通过脚本内部获取需要的数据。
其实python脚本也可以用其他方式来接收传递给他的文件数据或者bash命令输出,包括将命令行的输出通过管道传递给该脚本、重定向文件到该脚本,或在命令行中传递一个文件名或文件名列表给该脚本。
这里通过Python内置的fileinput模块,可以实现重定向,管道,以文佳输出的方式传递数据到脚本内部
使用fileinput.input()方法可以获取当前输入脚本的数据,脚本里面用一个FileInput迭代器接收
文件直接接收
重定向接收
管道方式接收
fileinput.input()创建并返回一个FileInput类的实例,该实例可以被当做一个上下文管理器使用。因此,整合起来,如果我们要写一个打印多个文件输出的脚本,那么我们需要在输出中包含文件名和行号
「你想执行一个外部命令并以Python字符串的形式获取执行结果。」
使用subprocess.check_output()函数。
执行下试试
如果被执行的命令以非零码返回,就会抛出异常。下面的例子捕获到错误并获取返回码:
默认情况下,check_output()仅仅返回输入到标准输出的值。如果你需要同时收集标准输出和错误输出,使用stderr参数:
如果你需要用一个超时机制来执行命令,使用timeout参数:
通常来讲,命令的执行不需要使用到底层shell环境(比如sh、bash)。一个字符串列表会被传递给一个低级系统命令,比如os.execve()。
如果你想让命令被一个shell执行,传递一个字符串参数,并设置参数shell=True.有时候你想要Python去执行一个复杂的shell命令的时候这个就很有用了,比如管道流、I/O重定向和其他特性。例如:
是在shell中执行命令会存在一定的安全风险,特别是当参数来自于用户输入时。这时候可以使用shlex.quote()函数来将参数正确的用双引用引起来。
使用check_output()函数是执行外部命令并获取其返回值的最简单方式。但是,如果你需要对子进程做更复杂的交互,比如给它发送输入,你得采用另外一种方法。这时候可直接使用subprocess.Popen类。
关于子进程,简单来看下
也可以进程列表同协程结合的方式。你既可以在子shell中进行繁重的处理工作,同时也不会让子shell的I/O受制于终端。
如果直接丢到后台会自动在终端输出IO
subprocess模块对于依赖TTY的外部命令不合适用。例如,你不能使用它来自动化一个用户输入密码的任务(比如一个ssh会话)。这时候,你需要使用到第三方模块了,比如基于著名的expect家族的工具(pexpect或类似的)(pexpect可以理解为Linux下的expect的Python封装、通过pexpect可以实现对ssh、ftp、passwd、telnet等命令行进行自动交互,而无需人工干涉来达到自动化的目的。比如我们可以模拟一个FTP登录时所有交互,包括输入主机地址、用户名、密码、上传文件等,待出现异常还可以进行尝试自动处理。)
「你想向标准错误打印一条消息并返回某个非零状态码来终止程序运行」
通过python的raiseSystemExit(3)命令可以主动抛出一个错误,通过sys.stderr.write将命令写到标准的输出端
直接将消息作为参数传给SystemExit(),那么你可以省略其他步骤
抛出一个SystemExit异常,使用错误消息作为参数,它会将消息在sys.stderr中打印,然后程序以状态码1退出
「你需要知道当前终端的大小以便正确的格式化输出。」
使用os.getterminalsize()函数来做到这一点。
「复制或移动文件和目录,但是又不想调用shell命令。」
shutil模块有很多便捷的函数可以复制文件和目录。使用起来非常简单
这里不多讲,熟悉Linux的小伙伴应该不陌生。
默认情况下,对于符号链接这些命令处理的是它指向的东西文件。例如,如果源文件是一个符号链接,那么目标文件将会是符号链接指向的文件。如果你只想复制符号链接本身,那么需要指定关键字参数follow_symlinks
copytree()可以让你在复制过程中选择性的忽略某些文件或目录。你可以提供一个忽略函数,接受一个目录名和文件名列表作为输入,返回一个忽略的名称列表。例如:
对于文件元数据信息,copy2()这样的函数只能尽自己最大能力来保留它。访问时间、创建时间和权限这些基本信息会被保留,但是对于所有者、ACLs、资源fork和其他更深层次的文件元信息就说不准了
通常不会去使用shutil.copytree()函数来执行系统备份。当处理文件名的时候,最好使用os.path中的函数来确保最大的可移植性
使用copytree()复制文件夹的一个棘手的问题是对于错误的处理,可以使用异常块处理,或者通过参数ignoredanglingsymlinks=True忽略掉无效符号链接。
「创建或解压常见格式的归档文件(比如.tar,.tgz或.zip)」
shutil模块拥有两个函数——makearchive()和unpackarchive()可派上用场,
makearchive()的第二个参数是期望的输出格式。可以使用getarchiveformats()获取所有支持的归档格式列表。
「你需要写一个涉及到文件查找操作的脚本,比如对日志归档文件的重命名工具,你不想在Python脚本中调用shell,或者你要实现一些shell不能做的功能。」
查找文件,可使用os.walk()函数,传一个顶级目录名给它
os.walk()方法为我们遍历目录树,每次进入一个目录,它会返回一个三元组,包含相对于查找目录的相对路径,一个该目录下的目录名列表,以及那个目录下面的文件名列表。
对于每个元组,只需检测一下目标文件名是否在文件列表中。如果是就使用os.path.join()合并路径。为了避免奇怪的路径名比如././foo//bar,使用了另外两个函数来修正结果
os.walk(start)还有跨平台的优势。并且,还能很轻松的加入其他的功能。我们再演示一个例子,下面的函数打印所有最近被修改过的文件:
打印10分钟之前被修改的数据
「怎样读取普通.ini格式的配置文件?」
configparser模块能被用来读取配置文件
编写配置文件
如果有需要,你还能修改配置并使用cfg.write()方法将其写回到文件中
「你希望在脚本和程序中将诊断信息写入日志文件。」
python脚本打印日志最简单方式是使用logging模块
五个日志调用(critical(),error(),warning(),info(),debug())以降序方式表示不同的严重级别。basicConfig()的level参数是一个过滤器。所有级别低于此级别的日志消息都会被忽略掉。每个logging操作的参数是一个消息字符串,后面再跟一个或多个参数。构造最终的日志消息的时候我们使用了%操作符来格式化消息字符串。
如果你想使用配置文件,可以像下面这样修改basicConfig()调用:
logconfig.ini
在调用日志操作前先执行下basicConfig()函数方法,可以找标准输出或者文件中输出
basicConfig()在程序中只能被执行一次。如果你稍后想改变日志配置,就需要先获取rootlogger,然后直接修改它。
更多见日志模块文档
「你想给某个函数库增加日志功能,但是又不能影响到那些不使用日志功能的程序。」
对于想要执行日志操作的函数库,你应该创建一个专属的logger对象,并且像下面这样初始化配置:
使用这个配置,默认情况下不会打印日志,只有配置过日志系统,那么日志消息打印就开始生效
通常来讲,不应该在函数库代码中自己配置日志系统,或者是已经有个已经存在的日志配置了。调用getLogger(name)创建一个和调用模块同名的logger模块。由于模块都是唯一的,因此创建的logger也将是唯一的。所以当前进程中只有一个logging会生效。
log.addHandler(logging.NullHandler())操作将一个空处理器绑定到刚刚已经创建好的logger对象上。一个空处理器默认会忽略调用所有的日志消息。因此,如果使用该函数库的时候还没有配置日志,那么将不会有消息或警告出现。
在这里,根日志被配置成仅仅输出ERROR或更高级别的消息。不过,somelib的日志级别被单独配置成可以输出debug级别的消息,它的优先级比全局配置高。像这样更改单独模块的日志配置对于调试来讲是很方便的,因为你无需去更改任何的全局日志配置——只需要修改你想要更多输出的模块的日志等级。(这个还有待研究)
「你想记录程序执行多个任务所花费的时间」
time模块包含很多函数来执行跟时间有关的函数。尽管如此,通常我们会在此基础之上构造一个更高级的接口来模拟一个计时器。
这个类定义了一个可以被用户根据需要启动、停止和重置的计时器。它会在elapsed属性中记录整个消耗时间。下面是一个例子来演示怎样使用它:
这里通过__enter__,__exit__,使用with语句以及上下文管理器协议可以省略计时器打开和关闭操作。(关于上下文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明__enter__和__exit__方法,,__enter__在出现with语句被调用,__exit__在代码执行完毕被调用,可以参考open()方法)
在计时中要考虑一个底层的时间函数问题。一般来说,使用time.time()或time.clock()计算的时间精度因操作系统的不同会有所不同。而使用time.perf_counter()函数可以确保使用系统上面最精确的计时器。
「你想对在Unix系统上面运行的程序设置内存或CPU的使用*。」
resource模块能同时执行这两个任务。例如,要*CPU时间,下面的代码在windows平台执行不了,但是Linux是可以的。
程序运行时,SIGXCPU信号在时间过期时被生成,然后执行清理并退出。
这暂时没有好的Demo...
程序运行到没有多余内存时会抛出MemoryError异常。
setrlimit()函数被用来设置特定资源上面的软*和硬*。
setrlimit()函数还能被用来设置子进程数量、打开文件数以及类似系统资源的*(cgroup)。
「通过脚本启动浏览器并打开指定的URL网页」
webbrowser模块能被用来启动一个浏览器,并且与平台无关
新窗口打卡网站
当前窗口打开一个tab页
指定浏览器类型,可以使用webbrowser.get()函数
结语:以上就是首席CTO笔记为大家介绍的关于单个python脚本多少行合适的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。