• Python使用小技巧


    1,查询U盘剩余空间大小   

    st = os.statvfs('/media/usb0/')
    free = (st.f_bavail*st.f_frsize)/1024/1024     # 单位是M

    2,查询U盘或者某个目录/文件大小

    size = os.path.getsize('/media/usb0/mega.log')   # 单位是字节

    3,把日志文件导出到U盘

    try:
        p = pexpect.spawn('lsblk')
        index = p.expect([UDISK, pexpect.EOF, pexpect.TIMEOUT])
    
        if index != 0:
            print('没有U盘')
            return
    
        st = os.statvfs(UDISK)
        if (st.f_bavail * st.f_frsize) < UDISK_MIN:
            print('U盘空间不足')
            return
    
        os.system('sudo cp mega.log* ' + UDISK)
    
        os.system('sync')
        
    except Exception as e:
        print(e)
        print('导出失败')

    4,把不可打印的字符过滤掉

    tt = ''.join(filter(lambda x: x in string.printable, tt))

    5,遍历符合条件的文件,并加入列表

    import os
    list= []
    
    files = os.listdir(r'../raspberry')
    for file in files:
        if file.endswith('.py'):
            list.append(file)
    
    print(list)

    6,在树莓派后台检查树莓派上插的U盘的文件大小

       

    du -s /media/usb0/mega.log --apparent-size

    7,查询window磁盘占用率:

    from subprocess import PIPE,Popen
    
    proc = Popen(
        'fsutil volume diskfree E:',
        stdin=None,
        stdout=PIPE,
        stderr=PIPE,
        shell=True)
    
    outinfo,erronfo = proc.communicate()
    
    outinfo = outinfo.decode('gbk')
    outputlist = outinfo.splitlines()
    
    free = int(outputlist[0].split(':')[1].strip())
    total = int(outputlist[1].split(':')[1].strip())

    8,使用python执行指令后有返回内容,

    os.system也可以执行指令,但是,不会有返回内容
    def adbdevices(deviceid):
        try:
            p = wexpect.spawn('adb devices')
            p.expect(deviceid, timeout=5)   #判断返回值是否包含关键字 deviceid
        except:
            return 1
    
        return 0

    9,有多个返回值

    def get_best_trip_by_user_id(user_id):
        return {
            'user': get_user(user_id),
            'trip': get_best_trip(user_id)
        }

    10,all() any()z在条件判断中使用

    • all(seq):仅当 seq 中所有对象都为布尔真时返回 True,否则返回 False
    • any(seq):只要 seq 中任何一个对象为布尔真就返回 True,否则返回 False
    #仅当序列中所有数字大于 10 时,返回 True
    
    def all_numbers_gt_10_2(numbers):
        return bool(numbers) and all(n > 10 for n in numbers)

     等价于下面这段代码,但是比下面的代码简洁

    def all_numbers_gt_10(numbers):
        """仅当序列中所有数字大于 10 时,返回 True
        """
        if not numbers:
            return False
    
        for n in numbers:
            if n <= 10:
                return False
        return True

    11, try/while/for 中 else 分支

            先看看这个函数:

    def do_stuff():
        first_thing_successed = False
        try:
            do_the_first_thing()
            first_thing_successed = True
        except Exception as e:
            print("Error while calling do_some_thing")
            return
    
        # 仅当 first_thing 成功完成时,做第二件事
        if first_thing_successed:
            return do_the_second_thing()

         在函数 do_stuff 中,我们希望只有当 do_the_first_thing() 成功调用后*(也就是不抛出任何异常)*,才继续做第二个函数调用。为了做到这一点,我们需要定义一个额外的变量 first_thing_successed 来作为标记。

         其实,我们可以用更简单的方法达到同样的效果:

    def do_stuff():
        try:
            do_the_first_thing()
        except Exception as e:
            print("Error while calling do_some_thing")
            return
        else:
            return do_the_second_thing()

        在 try 语句块最后追加上 else 分支后,分支下的do_the_second_thing() 便只会在 try 下面的所有语句正常执行(也就是没有异常,没有 return、break 等)完成后执行。

       类似的,Python 里的 for/while 循环也支持添加 else 分支,它们表示:当循环使用的迭代对象被正常耗尽、或 while 循环使用的条件变量变为 False 后才执行 else 分支下的代码。

     12,你要判断某个变量是否为 None 时,请使用 is 而不是 ==

     13,and 运算符的优先级大于 or

    >>> (True or False) and False
    >>> True or False and False

            它们的值分别是 False 和 True

    14,统计list里各个字符串的个数

        

    l =  ['4', '5', '6', '5', '6', '8', '9', '8', '6', '5', '7', '5', '4', '6']
    
    def ff():
        dict = {}
    
        for key in l:
            # if int(key) % 2 == 0:
            dict[key] = dict.get(key, 0) + 1
    
        return dict
    
    
    print('ff = ', ff())
    ff =  {'4': 2, '5': 4, '6': 4, '8': 2, '9': 1, '7': 1}
  • 相关阅读:
    poj 2892 && 3468
    hdu 2444
    反素数
    poj 2406 && 1961
    Java定时器Timer的使用
    Linux环境下如何生成core文件
    Java异步CompletableFuture的使用
    Java中线程池的使用
    Linux系统添加应用服务进程的守护进程
    C++通过Webbrowser调用JavaScript
  • 原文地址:https://www.cnblogs.com/147258llj/p/15850745.html
Copyright © 2020-2023  润新知