Python模块和命令行参数解析

开课吧开课吧锤锤2021-03-19 15:37

    Python最近是大火,给人的第一感觉是感觉Python无所不能,无处不在,事在人为,为所欲为。Python目前已跻身全球三大主流编程语言之一。

py

    模块

    Python内置了很多标准库,如做数学运算的math,调用系统功能的sys,处理正则表达式的re,操作系统相关功能的os等。我们主要关注两个库:

    sys

    sys.argv处理命令行参数

    sys.exit()退出函数

    sys.stdin标准输入

    sys.stderr标准错误

    os

    os.system()或os.popen()执行系统命令

    os.getcwd()获取当前目录

    os.remove()删除文件

import os
os.getcwd()#help(os.getcwd)#os.remove(r'D:\project\github\PBR_training\script\splitName.py')#os.system('rm file')
'/MPATHB/ct/ipython/notebook'
from os import getcwd
getcwd()
'/MPATHB/ct/ipython/notebook'

    命令行参数

    sys.argv是一个列表,存储了包含程序名字在内的传给程序的命令行参数。

%%writefile testSys.pyimport sys
print(sys.argv)
Writing testSys.py
%run testSys 'abc' 1
['testSys.py', 'abc', '1']
%%writefile cat.pyimport sysdef read_print_file(filename):
    for line in open(filename):
        print(line, end="")#------END read_print_file--------------------------#main函数及其调用部分是我个人写程序的固定格式,照搬就可以def main(): #一般主程序会包含在main函数中,在文件的最后调用main函数即可运行程序
    if len(sys.argv) < 2:  #如果命令行参数不足两个,则提示操作
        #一般提示信息输出到标准错误
        print("Usage: python %s filename" % sys.argv[0], file=sys.stderr)
        sys.exit(0)
    file = sys.argv[1]
    read_print_file(file)#--------END main------------------#这句话是说只有在文件被执行时才调用main函数。如果这个文件被其它文件调用,则不执行main函数。if __name__ == '__main__': 
    main()
Writing cat.py

    关于__main__的解释见关于Python中的main和编程模板。

%run cat
Usage: python cat.py filename
%run cat data/test1.fa
>NM_001011874 gene=Xkr4 CDS=151-2091
gcggcggcgggcgagcgggcgctggagtaggagctggggagcggcgcggccggggaaggaagccagggcg
>NM_001195662 gene=Rp1 CDS=55-909
AGGTCTCACCCAAAATGAGTGACACACCTTCTACTAGTTTCTCCATGATTCATCTGACTTCTGAAGGTCA
>NM_0112835 gene=Rp15 CDS=128-6412
AATAAATCCAAAGACATTTGTTTACGTGAAACAAGCAGGTTGCATATCCAGTGACGTTTATACAGACCAC
>NM_011283 gene=Rp1 CDS=128-6412
AATAAATCCAAAGACATTTGTTTACGTGAAACAAGCAGGTTGCATATCCAGTGACGTTTATACAGACCAC

    使用optparse,功能更强大(保留内容)

%%writefile skeleton.py#!/usr/bin/env pythondesc = '''
Functional description:

'''import sysimport osfrom time import localtime, strftime 
timeformat = "%Y-%m-%d %H:%M:%S"from optparse import OptionParser as OPdef cmdparameter(argv):
    if len(argv) == 1:        global desc        print >>sys.stderr, desc
        cmd = 'python ' + argv[0] + ' -h'
        os.system(cmd)
        sys.exit(0)
    usages = "%prog -i file"
    parser = OP(usage=usages)
    parser.add_option("-i", "--input-file", dest="filein",
        metavar="FILEIN", help="The name of input file. \
Standard input is accepted.")
    parser.add_option("-v", "--verbose", dest="verbose",
        default=0, help="Show process information")
    parser.add_option("-d", "--debug", dest="debug",
        default=False, help="Debug the program")
    (options, args) = parser.parse_args(argv[1:])    assert options.filein != None, "A filename needed for -i"
    return (options, args)#--------------------------------------------------------------------def main():
    options, args = cmdparameter(sys.argv)    #-----------------------------------
    file = options.filein
    verbose = options.verbose
    debug = options.debug    #-----------------------------------
    if file == '-':
        fh = sys.stdin    else:
        fh = open(file)    #--------------------------------
    for line in fh:        pass
    #-------------END reading file----------
    #----close file handle for files-----
    if file != '-':
        fh.close()    #-----------end close fh-----------
    if verbose:
        print("--Successful %s" % strftime(timeformat, localtime()), 
              file=sys.stderr)if __name__ == '__main__':
    startTime = strftime(timeformat, localtime())
    main()
    endTime = strftime(timeformat, localtime())
    fh = open('python.log', 'a')
    print("%s\n\tRun time : %s - %s " % \
        (' '.join(sys.argv), startTime, endTime), file=sys.stderr)
    fh.close()
Writing skeleton.py
%run skeleton -h
Usage: skeleton.py -i file

Options:
  -h, --help            show this help message and exit
  -i FILEIN, --input-file=FILEIN
                        The name of input file. Standard input is accepted.
  -v VERBOSE, --verbose=VERBOSE
                        Show process information
  -d DEBUG, --debug=DEBUG
                        Debug the program

    以上就是模块和命令行参数的全部内容,更多Python教程相关内容尽在开课吧广场Python教程频道。

有用
分享