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}