[TOC]

在目录下创立py文件,并进行运行

os模块

在Python中有一个内置库os,是一个零碎接口库,operating system interfaces。在linux零碎中解决数据、运行脚本的时候,常常会操作文件和目录,所以os库就是起这个作用,对于固定逻辑的文件、目录的操作,都能够写成脚本的模式。

上面就介绍几种罕用办法:

  1. getcwd

    获取当前目录门路

     [I have no name!@i-7lo31rsr Ceallach_Shaw]$pwd /home/coggle/Ceallach_Shaw [I have no name!@i-7lo31rsr Ceallach_Shaw]$vi os_test.py

    新建py文件,引入os模块,利用getcwd办法,打印以后门路。留神:这里用的vi,所以退出保留的办法是,esc退出insert模式,切换到命令行模式,输出wq,回车保留。(后文对vi的应用不再赘述了,遗记了的同学就翻阅上一篇文章 Linux根底(一)

    import osprint(os.getcwd())

    命令行下,运行py文件,打印的门路与以后门路统一。

     [I have no name!@i-7lo31rsr Ceallach_Shaw]$python3 os_test.py   /home/coggle/Ceallach_Shaw
  2. path.abspath('.')

    .代表以后门路,查看当前目录的绝对路径

    import os#print(os.getcwd())print(os.path.abspath('.'))

    运行py文件:

    [I have no name!@i-7lo31rsr Ceallach_Shaw]$python3 os_test.py /home/coggle/Ceallach_Shaw

    补充:

    • “.”示意当前目录,也能够用“./”示意;
    • “..”示意上一级目录,也能够用“../”示意;
    • “~” 代表用户的宿主目录;
    • “/”处于Linux文件系统树形构造的最顶端,咱们称它为Linux文件系统的root,它是Linux文件系统的入口(参考上一篇文章内容中的目录结构图Linux根底(一))
  3. listdir('.')

    列出当前目录下所有文件与目录

    import osl=os.listdir('.')print(l)

    如果只是须要列出当前目录下的所有目录(文件不须要),则在for循环前面加个条件判断是否为目录 if os.path.isdir(x)

    [x for x in os.listdir('.') if os.path.isdir(x)]

  4. mkdir 、rmdir

    mkdir-创立目录、rmdir-删除目录

    在当前目录下创立一个dir2的目录:

    import osos.mkdir(os.getcwd()+'/dir2')

    dir2目录创立胜利:

    [I have no name!@i-7lo31rsr Ceallach_Shaw]$python3 os_test.py [I have no name!@i-7lo31rsr Ceallach_Shaw]$lsaffairs.txt  coggle  dir  dir2    os_test.py  test.py  test2.txt

    补充:

    • removedirs,递归删除目录
    • remove,移除文件
  5. rename

    文件或者目录重命名

    把目录dir2重命名为dir3:

    import osos.rename('dir2','dir3')
    [I have no name!@i-7lo31rsr Ceallach_Shaw]$python3 os_test.py [I have no name!@i-7lo31rsr Ceallach_Shaw]$lsaffairs.txt  coggle  dir  dir3    os_test.py  test.py  test2.txt
  6. path.splitext

    输出文件的绝对路径,失去文件扩展名

    import osprint(os.path.splitext(os.getcwd()+'os_test.py'))

    输入:

    ('/home/coggle/Ceallach_Shawos_test', '.py')

    列出当前目录下所有.py文件,需加上条件判断是否为文件 if os.path.isfile(x):

    l=[x for x in os.listdir('.')             if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']print(l)

sys模块

sys 模块次要负责与 Python 解释器进行交互,该模块提供了一系列用于管制 Python 运行环境的函数和变量。

  1. sys.argv

    实现从程序内部向程序传递参数,简略说,sys.argv[]就是一个从程序内部获取参数的桥梁,其返回的时一个参数列表。第一个元素是程序自身,随后才顺次是内部给予的参数。

    上面就是打印python的帮忙信息:

    import sysprint(sys.argv)

    输入:

    可见,输入第一个参数是文件名,前面的参数就是内部传入的参数。

    咱们常常看到在命令行的状况下,输出--help,--version等参数,即可打印出相干信息。sys.argv的作用就是传递内部参数值到指标办法/函数中去。

    再看一个书上的相干例子,对于--help,--version参数的实现:

    import sysdef readfile(filename):   f=open(filename)   while True:      line=f.readline()      if len(line)==0:            break            print("wrong! EOF")      print(line)if len(sys.argv) < 2:   print ('No action specified.')   sys.exit()# 从第二个参数(内部传入的第一个参数),以--结尾的,并且从这个参数的第三个字符开始截取if sys.argv[1].startswith('--'):   option = sys.argv[1][2:]   # 如果--前面的字符是version,则输入Version 1.2   if option == 'version':      print ('Version 1.2')   elif option == 'help':      print ('''\This program prints files to the standard output.Any number of files can be specified.Options include:--version : Prints the version number--help    : Display this help''')   else:      print ('Unknown option.')   sys.exit()else:   for filename in sys.argv[1:]:      readfile(filename)   
  2. sys.path

    获取指定模块搜寻门路的字符串汇合。

    当咱们导入一个模块时:import xxx,默认状况下python解析器会搜寻并依照当前目录、已装置的内置模块和第三方模块这个程序打印进去,搜寻门路寄存在sys模块的path中:

    import sysprint(sys.path)

    当初有一种很常见的状况,就是你写好了Py文件,放在另外一个目录下,如果当前目录下的py文件须要援用写好的py文件里的办法的时候,就须要将寄存py脚本的目录退出sys.path的列表中。

    对于须要援用的模块和须要执行的脚本文件不在同一个目录时,能够依照如下模式来增加门路:

    import sys  sys.path.append(’须要援用模块的地址')  # sys.path.append(..)   # 这代表增加以后门路的上一级目录

练习

  1. 应用os模块打印/usr/bin/门路下所有以m结尾的文件
import os # 先切换到/usr/bin/目录下c = os.chdir('/usr/bin/')# path.isfile办法判断是否为文件,startswith判断字符串结尾首字母ml = [x for x in os.listdir(c)             if os.path.isfile(x) and x.startswith('m')]print(l)

  1. 打印命令行参数
import sys# 第一个参数为文件名,内部传入的参数从第二个参数开始print(sys.argv[1:])


参考链接:

  1. https://docs.python.org/zh-cn...
  2. https://www.cnblogs.com/peter...

欢送关注集体公众号:Distinct数说