文件操作
- 文件上传 及 下载
open(file,mode,buffering,endcoding) | 系统函数 |
---|---|
rt | l默认 |
w | 写文件 |
a | append追加的意思,不会覆盖 |
- 读 open(path,‘rt’),
stream = open(r'c:\df.txt')
# 循环line
while 1:
line = stream.readline()
print(line)
if not line:
break
lines = stream.readlines() #行1\n,行2\n
for i in lines:
print(i)
- 写文件 覆盖
stream=open(r’c:’,‘w’)
stream=open(r'c:\','w')
s = '你真的是厉害'
result = stream.write(s)
print(result)
#stream.close()
stream.writelines(['a\n','b\n','c\n'])
- 文件的复制
原C:
新D:
with结合open使用,可以帮助我们自动 释放资源
针对图片操作: wb,rb
with open(r'c:\','rb') as stream:
container=stream.read()
with open(r'D:\','wb' as wstream:
wstream.write(container)
print('复制完成')
- OS模块 operating system
xxx.py>>>>如os.py
with open(r'c:\','rb') as stream:
container=stream.read()
path = os.path.dirname(__file__) #获取当前文件所在的目录(绝对路径)
path1 = os.path.join(path,'aa.txt')
with open(path1,'wb') as wstream:
wstream.write(container)
- 文件名截取
更简洁的文件名获取方法
OS模块
absolution 绝对文件路径 | r’c:\df\s\aa.txt’ |
---|---|
相对路径 | '…/s/aa.txt’上一级 |
相对路径 | '…/…/s/aa.txt’上二级 |
相对路径 | 's/aa.txt同一级中 |
os.path.dirname(file) directory目录 | 获取当前文件的路径 |
os.path.abspath(‘aa.txt’) | 通过相对路径得到文件的绝对路径 |
os.path.splitext(path) | 分割文件与扩展名 |
os.path.split(path) | 文件的文件夹路径与文件的全名 |
os.path.getsize | 文件大小(字节数) |
os.path.join(os.getcwd(),‘a’,‘b’,‘c.jpg’) | 可以追加多个,多一个,就是多一层:a\b\c.jpg |
os.getcwd() | 获取文件夹的路径 |
os.listdir(r’c:\pq’) | 返回指定目录下的所有的文件和文件夹,保存到[ ]中 |
os.mkdir(r’c:\p3’) | make创建文件夹 |
os.rmdir() | remove删除文件夹,但只能删除空文件夹 |
os.removedirs() | 可以删除多个目录,只能空文件夹 |
os.remove() | 可以删除文件 |
os.chdir(r’c:\p1’) | change切换至目录c:\p1文件夹,类似cd |
# 如果该路径下没有,则创建一个p1文件夹
if not os.path.exists(r'c:\p1'):
f = os.mkdir(r'c:\p1')
删文件后删除文件夹
案例: 用户名等保存在本地
测试是否存在用户名及密码
- 异常
格式:
try:
except:
except **ERROR:
except exception:
finally:
用途:
程序不出错、正常运行全部
可以弹准确的错误信息,方便查找原因
如在代码中使用else(不报错就会进else),则不能使用return
finally 一般会放close()
列表推导式:
def func():
newlist = []
for i in range(5):
if i%2==0:
for j in range(10):
newlist.append((i,j))
return newlist
# 如有if else的推导式
newlist = [(x,y) for x in range(5) if x%2==0 for y in range(10) if y%2!=0]
newlist = [x for x in range(5) if x%2==0 and x%5!=0]
newlist2 = [ x+200 if x>5 else x-100 for x in range(5) ]
集合推导式:去重复{}
字典推导式:{value : key for key,value in dict1.items()}
- 生成器generator,迭代器
- 列表推导式的【】换成()就变成 了生成器
next(g)
g.next()
g.send()
函数中有yield = return +暂停
def func():
n = 0
while True:
n+=1
yield n
g = func()
next(g)
next(g)
next(g)
next(g)
- 进程 - 线程 - 协程
多个进程分别独立,互不干涉
一个进程可以分为多个线程
一个线程可以分支成多个协程
def A:
for i in range(n):
print('听第{}首歌'.format(n))
yield None
def B:
for i in range(n):
print('吃第{}个包子'.format(n))
yield None
p = A(10)
p1 =B(10)
while True:
try:
next(p)
next(p1)
except:
pass