Path
#获取当前工作目录
Path.cwd() #代替os.getcwd()
#创建文件夹
#parents=True可以一直沿着路径创建多个新文件夹,exist_ok=True代表文件夹可以已经存在
Path("C:/a/b/c/").mkdir(parents=True, exist_ok=True)
#拼接路径
Path("a").joinpath("b").with_suffix(".csv") #得到"a/b.csv"
#遍历
Path("test").glob("*.txt")
Path("test").rglob("*.*")
#Windows家目录
Path.home() #代替os.environ["USERPROFILE"]
#读取写入
Path("aa.txt").write_text("content","utf-8")
content=Path("aa.txt").read_text("utf-8")
Stream
from io import StringIO
f = StringIO() #创建StringIO对象--可以看做在内存中的文件
ff = StringIO('Hello!\nHi!\nGoodbye!') #这样初始化的时候就有值,但是好像有BUG
i=f.write('hello我是中国人\n') #写入字符串,自动移动读写指针
i=f.write('李明\n')#返回字符串个数,个人怀疑是指针位置
f.write('中国\n')
text=f.getvalue() #简单写法,读取全部字符串,指针不动
#移动读写指针
ss=f.seek(0)
"""参数:
为0时代表从文件开头开始算起
1代表从当前位置开始算起
2代表从文件末尾算起
如果操作成功,则返回新的指针位置,如果操作失败,则函数返回 -1"""
s=f.tell() #返回当前读写位置
s = f.readline() #从当前位置开始读取一行,包括\n;自动移动读写指针
s=f.readlines() #读取所有行,返回一个字符串列表;;自动移动读写指针
f.flush() #刷新
s=f.read() # 读取全部内容;自动移动读写指针
s=f.read(5) #从当前位置开始读取5个
f.truncate(3) #保留最前面的3个字符数,其它都删除
f.close() #关闭
流可以用于sys.stdout=StringIO()
这种功能,这种写法主要用于日志(log)。但专业的日志记录可用自带库logging
或第三方库loguru
。
类
class Person(object):
def __init__(self, newName, newAge):
self.name = newName
self.age = newAge
def eat(self):
print(f"{self.name}正在吃")
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.die()
def rain():
print("下雨了")
def run(self):
print(f"{self.name}正在跑")
#动态添加类方法
p1 = Person("甲", 10)
#吃
p1.eat()
#下雨
p1.rain=rain
p1.rain()
#跑
#p1.run = run 不可行。到时候会报错:缺少参数
import types
p1.run=types.MethodType(run,p1) #正确
p1.run()
枚举
enum库可以创建枚举类型
函数注释
def func(a,b):
"""
:param a: 加数1
:param b: 加数2
:return: 情况1的返回值
:return: 情况2的返回值
"""
if a<b:
return a+b
else:
retunr a-b
U盘
import psutil
def get_all_USBs():
"返回disk_info的列表"
return [
di
for di in psutil.disk_partitions()
if "removable" in di.opts.split(",") or di.fstype in ("FAT32", "exFAT")
]
print("\n".join(i.mountpoint for i in get_all_USBs()))