zoukankan      html  css  js  c++  java
  • python自动化运维记录

    解释器

    #!/usr/bin/env python
    # coding: utf-8
    # -*- coding: utf-8 -*-
    

    基础学习脚本

    +加号拼接

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import getpass
    
    name = input("Please input your name")
    pwd = getpass.getpass("please input your passwd")
    print("My name is" + name, "and passwd is" + pwd)
    

    输出

    # chmod +x study1.py
    # pytohon study1.py
    Please input your namehuang
    please input your passwd
    My name ishuang and passwd is123
    

    逗号 空格分割:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import getpass
    
    name = input("Please input your name")
    pwd = getpass.getpass("please input your passwd")
    print("My name is", name, "and passwd is", pwd)
    

    输出:

    # python study1.py 
    Please input your namehuang
    please input your passwd
    My name is huang and passwd is 123
    

    格式化输出:

    #!/usr/bin/env python
    # coding: utf-8
    
    name = input("please input your name: ")
    age = input("please input your age: ")
    job = input("please input your job: ")
    
    msg = '''
    # 默认字符串形式输出%s
    Information of %s 
    -----------------
    Name: %s
    Age: %s
    Job: %s
    ''' %(name,name,age,job)
    
    print(msg)
    

    输出:

    # python study2.py 
    please input your name: huang
    please input your age: 12
    please input your job: engineer
    
    Information of huang
    -----------------
    Name: huang
    Age: 12
    Job: engineer
    

    python3中格式化输出默认接收的都是字符串,如果是数字则需要另外强制转化为init()转化为数字类型

    #!/usr/bin/env python
    # coding: utf-8
    
    name = input("please input your name: ")
    age = input("please input your age: ")
    job = input("please input your job: ")
    
    msg = '''
    Information of %s
    -----------------
    Name: %s
    Age: %d
    Job: %s
    ''' %(name,name,age,job)
    
    print(msg)
    

    运行:

    please input your name: 1
    please input your age: 12
    please input your job: 12
    Traceback (most recent call last):
      File "study2.py", line 14, in <module>
        ''' %(name,name,age,job)
    TypeError: %d format: a number is required, not str
    

    报错原因: age没有转化格式为数字,导致执行代码时报错,init()转化了则不会报错

    #!/usr/bin/env python
    # coding: utf-8
    
    name = input("please input your name: ")
    age = input("please input your age: ")
    age = int(age)
    job = input("please input your job: ")
    
    msg = '''
    Information of %s
    -----------------
    Name: %s
    Age: %d
    Job: %s
    ''' %(name,name,age,job)
    
    print(msg)
    

    运行:

    # python study2.py 
    please input your name: huang
    please input your age: 12
    please input your job: student
    
    Information of huang
    -----------------
    Name: huang
    Age: 12
    Job: student
    

    模块

    sys

    sys.argv 从外部向程序内部传递参数

    #!/usr/bin/env python
    # coding: utf-8
    
    import sys
    
    print(sys.argv)
    print(sys.argv[0])
    print(sys.argv[2])
    

    运行:[获取执行脚本时带上的参数被获取到]

    # python module_test1.py  hello world
    ['module_test1.py', 'hello', 'world']
    module_test1.py
    world
    
    #!/usr/bin/env python
    
    import sys
    
    for i in range(len(sys.argv)):
      print('argv{0}: type is {1}, value is {2}'.format(i, type(sys.argv[i]), sys.argv[i]))
    
    # python sys_argv.py 1 2 s 
    
    argv0: type is <class 'str'>, value is sys_argv.py
    argv1: type is <class 'str'>, value is 1
    argv2: type is <class 'str'>, value is 2
    argv3: type is <class 'str'>, value is s
    

    循环

    while 循环

    eg1

    [1:] 意义:遍历,去掉列表中的第一个元素(下表为0),去后面的元素进行操作

    #!/usr/bin/env python
    # coding: utf-8
    url = "lannister.poizon.com"
    while url:
      print(url)
      url = url[1:]
    

    运行:

    lannister.poizon.com
    annister.poizon.com
    nnister.poizon.com
    nister.poizon.com
    ister.poizon.com
    ster.poizon.com
    ter.poizon.com
    er.poizon.com
    r.poizon.com
    .poizon.com
    poizon.com
    oizon.com
    izon.com
    zon.com
    on.com
    n.com
    .com
    com
    om
    m
    
    eg2
    #!/usr/bin/env python
    # coding: utf-8
    
    x = 0;y = 10
    while x < 10:
      print(x)
      x += 1
    
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    

    [:-1]:遍历,去掉列表中的最后一个元素,去前面一个的元素进行操作

    #!/usr/bin/env python
    # coding: utf-8
    url = 'lannister.poizon.com'
    while url:
      print(url)
      url = url[:-1]
    else:
      print('game over')
    

    运行:

    lannister.poizon.com
    lannister.poizon.co
    lannister.poizon.c
    lannister.poizon.
    lannister.poizon
    lannister.poizo
    lannister.poiz
    lannister.poi
    lannister.po
    lannister.p
    lannister.
    lannister
    lanniste
    lannist
    lannis
    lanni
    lann
    lan
    la
    l
    game over
    

    函数

    pop函数

    使用: 用于一处列表中的一个元素,默认最后一个元素,并且返回该元素值
    pop(0) 删除第一个元素

    #!/usr/bin/env python
    # coding: utf-8
    
    list = [1, 2, 3, 4, 5]
    count = 0
    while list:
      print(list[0])
      list.pop()
    
    list2 = [1, 2, 3, 4, 5]
    count = 0
    while list2:
      print(list[0])
      list.pop(0)
    

    运行:

    # part 1:
    1
    1
    1
    1
    1
    # part 2:
    1
    2
    3
    4
    5
    

    场景练习脚本:

    #!/usr/bin/env python
    # coding: utf-8
    
    import getpass
    
    name = 'sihye'
    pwd = '123456'
    count = 0
    
    while True:
      if count < 3:
        print('please enter your name and passwd ')
        username = input('username: ')
        passwd = getpass.getpass('passwd: ')
        if username == name and passwd == pwd:
          print('welcome come back')
          break;
        else:
          print('wrong')
      else:
        print('you have already failed 3 times...logging out...')
        break;
      count += 1 
    

    运行:

    # python user_login.py 
    please enter your name and passwd 
    username: sihye
    passwd: 
    wrong
    please enter your name and passwd 
    username: sihye
    passwd: 
    wrong
    please enter your name and passwd 
    username: sihye
    passwd: 
    welcome come back
    

    场景二:猜年龄游戏

    #!/usr/bin/env python
    # coding: utf-8
    
    age = 8
    count = 0
    for i in range(20):
      if count < 3:
        a = int(input("age: "))
        if a == age:
          print('success')
          break
        elif a < age:
          print('smaller~')
        else:
          print('bigger~')
      else:
        b = input('continue? ')
        if b == 'yes':
          count = 0
          continue
        else:
          print('see u next time')
          break
      count += 1
    

    运行:

    # python guess_age.py 
    age: 1
    smaller~
    age: 2
    smaller~
    age: 1
    smaller~
    continue? no
    see u next time
    # python guess_age.py 
    age: 8
    success
    

    运维场景脚本

    新创脚本时可自动生成python解释器
    # 在用户的家目录下创建'.vimrc'文件
    # root用户
    # ---------
    # vim ~/.vimrc
    function HeaderPython()
    
    call setline(1, "#!/usr/bin/env python")
    
    call append(1, "#-*- coding:utf8 -*-")
    
    normal G
    
    normal o
    
    normal o
    
    endf
    
    autocmd bufnewfile *.py call HeaderPython()
    

    保存退出即可,之后创建.py文件就会自动生成解释器

    输出某个目录下所有子目录下的文件,并输出绝对路径

    方法一:用OS库

    #!/usr/bin/env python
    #-*- coding:utf8 -*-
    
    import os
    for root,dirs,files in os.walk('/server/scripts'):
      for name in files:
        print(os.path.join(root,name))
    

    方法二:用pathlib

    path.rglob()相当于 os.walk,可添加筛选条件
    
    #!/usr/bin/env python
    #-*- coding:utf8 -*-
    
    from pathlib import Path
    
    path = Path(r'/server')
    for p in path.rglob("*.py"):
      print(str(p))
    

    pathlib库

    引用:

    from pathlib import Path
    p = Path()
    p.name 获取文件名,包含所有目录名和文件名
    p.parent 获取每个文件的目录名称,一直到最后一层目录都输出,有几个文件就会输出几次
    p.parents 会输出每一个子目录,返回一个iterable
    

    场景:

    #!/usr/bin/env python
    #-*- coding:utf8 -*-
    
    from pathlib import Path
    
    path = Path(r'/server/scripts/python')
    for p in path.rglob("*"):
      p.parents
      for i in p.parents:
        print(i)
    运行:
    server/scripts/python
    /server/scripts
    /server
    /
    /server/scripts/python
    /server/scripts
    /server
    /
    /server/scripts/python/study_base_scripts
    /server/scripts/python
    /server/scripts
    /server
    /
    

    场景二:

    #!/usr/bin/env python
    #-*- coding:utf8 -*-
    
    from pathlib import Path
    
    path = Path(r'/server/scripts/python')
    for p in path.rglob("*"):
      print(p.parent)
    运行:
    /server/scripts/python
    /server/scripts/python
    /server/scripts/python/study_base_scripts
    /server/scripts/python/study_base_scripts
    /server/scripts/python/study_base_scripts
    

    场景三:判断文件是否存在

    #!/usr/bin/env python
    #-*- coding:utf8 -*-
    
    from pathlib import Path
    
    path = Path(r'/server')
    path = Path(path,'scripts') # 字符串拼接,也就是后面检验的是/server/scripts是否存在
    print(path.exists())  #判断文件是否存在
    print(path.is_file()) #判断是否是文件
    print(path.is_dir()) #判断是否是目录
    

    运行:

    # python find_file.py 
    True
    False
    True
    

    场景四:遍历文件夹

    path.iterdir(): 相当域os.listdir,
    path.glob('*'), 相当于os.listdir, 可添加条件
    path.rglob('*'),相当于 os.walk , 可添加筛选条件
    
    #!/usr/bin/env python
    #-*- coding:utf8 -*-
    
    from pathlib import Path
    
    path = Path(r'/server/scripts')
    for p in path.glob("*ell"):
      print(p)
    print('------------------')
    for n in path.iterdir():
      print(n)
    print('------------------')
    for i in path.rglob("*.py"):
      print(i)
    print('------------------')
    

    运行:

    # python find_file.py 
    /server/scripts/shell
    ------------------
    /server/scripts/python
    /server/scripts/shell
    ------------------
    /server/scripts/python/study_base_scripts/while_test2.py
    /server/scripts/python/study_base_scripts/guess_age.py
    /server/scripts/python/study_base_scripts/user_login.py
    /server/scripts/python/study_base_scripts/name_test2.py
    /server/scripts/python/study_base_scripts/sys_argv.py
    /server/scripts/python/study_base_scripts/while_test.py
    /server/scripts/python/study_base_scripts/sys_os.py
    /server/scripts/python/study_base_scripts/while_test3.py
    /server/scripts/python/study_base_scripts/name_test1.py
    /server/scripts/python/study_base_scripts/stdout.py
    /server/scripts/python/study_base_scripts/module_test1.py
    /server/scripts/python/ops_base_scripts/find_file.py
    /server/scripts/python/ops_base_scripts/dic_list.py
    ------------------
    

    场景五:创建文件夹

    #!/usr/bin/env python
    #-*- coding:utf8 -*-
    
    from pathlib import Path
    # 第一种方式:前提是tmp文件夹必须存在,否则会报错。
    path = Path(r'/server/tmp/python') 
    path.mkdir(exist_ok=True)
    # 第二种方式:若是tmp文件不存在会递归创建文件夹。
    path = Path(r'/server/tmp/python')
    path.mkdir(exist_ok=True, parents=True)
    

    场景五: 获取文件的详细信息

    #!/usr/bin/env python
    # coding:utf-8
    
    from pathlib import Path
    
    path = Path(r'/server/scripts/python')
    
    print(path.stat())
    print(path.stat().st_size)
    print(path.stat().st_ctime)
    

    运行:

    
    

    场景六: 查看某个目录下有几个匹配类型文件

    #!/usr/bin/env python
    #-*- coding:utf8 -*-
    
    from pathlib import Path
    
    path = Path(r'/server/scripts')
    for p in path.rglob('*.py'):
      print(p.parent)
    

    运行:

    # python review.py | sort -rn | uniq -c
         13 /server/scripts/python/study_base_scripts
          4 /server/scripts/python/ops_base_scripts
    

    方法

  • 相关阅读:
    数据可视化之DAX篇(二)Power BI中的度量值和计算列,你搞清楚了吗?
    数据可视化之DAX篇(一)Power BI时间智能函数如何处理2月29日的?
    数据可视化之powerBI技巧(二十四)Power BI初学者刚见的错误,帮你轻松处理
    数据可视化之powerBI技巧(二十三)Power BI可视化技巧,使用DAX自定义时间轴
    数据可视化之powerBI技巧(二十二)利用这个方法,帮你搞定Power BI"增量刷新"
    数据可视化之powerBI技巧(二十一)简单三个步骤,轻松管理你的Power BI度量值
    数据可视化之powerBI技巧(二十)采悟:创建度量值,轻松进行分组统计
    数据可视化之powerBI技巧(十九)DAX作图技巧:使用度量值动态分组和配色
    数据可视化之powerBI技巧(十八)Power BI动态技巧:动态显示列和度量值
    JavaScript isFinite() 函数
  • 原文地址:https://www.cnblogs.com/sihye/p/12619440.html
Copyright © 2011-2022 走看看