您的位置:首页 > 编程语言 > Python开发

python:9:os模块与sys.argv

2017-10-19 08:08 295 查看

第一章:python

第九节:执行非python程序的os模块及命令行参数sys.argv

1,命令行参数:sys.argv的用法

sys模块通过sys.argv属性提供了对命令行参数的访问。

命令行参数是调用某个程序时除程序名以外的其他参数。

在python中,sys.argv代表命令行输入列表的长度,而该列表的第一项sys.argv[0]永远是程序的名称,即该脚本的文件名(例如:orthoMCL_identity.py)。

>>> import sys


>>> if len(sys.argv) != 3:


... ····print 'need 2 parameter


>>> db=sys.argv[1]


>>> identity=sys.argv[2]


这里要运行python orthoMCL_identity.py db 90,这里的db 90是要输入的两个参数,sys.argv长度为3,orthoMCL_identity.py作为脚本名称,则需要另外两个参数db和90,则满足sys.argv为3的长度。

这里sys.argv[0]是orthoMCL_identity.py这个文件名,而sys.argv[1]表示第一个命令行参数,而sys.argv[2]表示第二个命令行参数。

2,执行非python程序:os模块的用法

os模块提供了多数操作系统的功能接口函数,当os模块被导入后,它会自行适应不同的操作系统平台。

>>> import os


>>> os.chdir('dirname')
#进入一个目录

>>> os.mkdir('dirname')
#创建一个目录

>>> os.makedirs('dirname1/dirname2')
#创建一个多级目录

>>> os.getcwd()
#获取工作的目录路径,即当前工作目录

>>> os.rename('oldname', 'newname')
#重命名文件/目录

>>> os.system('ls')
#运行shell命令

注意,这个shell命令必须是shell内的的命令,而不是~/.bashrc用户自己内定的环境变量,例如alias ll=’ls -l’,则os.system(‘ll’)会显示ll未定义。

>>> os.popen('bash command')
#运行shell命令,生成对象,利用标签定义后可再用read()或readlines()读取。

实例:

>>> os.popen('less name.txt')


<open file 'less name.txt', mode 'r' at 0x2afe3743edbo>


>>> os.popen('less name.txt').read()


'110 120 119\n'


但要打开的文件名前一定要加入less,cat等shell命令,单单只有文件名则会读取空内容。

目录遍历

os.walk()

函数声明:os.walk(path)

该函数返回一个元组,该元组有三个元素

这3个元素分别表示每次遍历的路径名目录列表文件列表

所以,可以将传值的目录进行遍历,且以元组形式返回值

若传值为绝对路径,则返回一个生成器

>>> os.walk('/root/pypi/testdir')


<generator object walk at 0x7f36135a8500>


>>> g=os.walk('/root/pypi/testdir')
#os.walk(os.getcwd())

>>> g.next()


('/root/pypi/testdir', ['jpg'], ['f3', 'f1', 'f2'])


返回一个元组内的三个元素,第一个元素为当前目录路径(绝对路径),第二个元素为该目录下的子目录(如果有多个子目录则返回的列表内有多个元素,如果没有子目录返回空列表),第三个元素为当前目录下的文件名(和第二个元素返回结果大致相同,列表内存在多个元素则存在多个文件,没有文件则返回空列表)

>>> g.next()


('/root/pypi/testdir/jpg', [], ['getjpg.py'])


可返回子目录下的内容,[]表示子目录下再无目录

>>> g.next()


StopIteration


os.path中的join()用法,实现输出当前目录及子目录的绝对路径

os.path.join(fpath, filename)

会将fpath这个路径及filename文件名直接作拼接

>>> for path, d, filelist in os.walk(os.getcwd()):
#每次遍历输出一个路径名称,第一次是当前目录,第二次是当前目录下的子目录

... ····for filename in filelist:
#循环取出该目录下的文件名

... ········os.path.join(path, filename)


...


os.path是一个方法,具体实现方法是os.path的一些模块,书中222页是op.path模块中的路径名访问函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: