文件os
文件:
文件操作:
open()
path,filename:
path:
绝对路径:C:\Users\running\Desktop\python基础\day13(6-14)\代码\day13_文件\images\girl.jpg
相对路径:相对当前文件的路径。返回上层目录: ../
mode:
读: rb r
写: wb w
stream = open(file,mode)
stream.read()
stream.write()
stream.close()
with open(file,mode) as stream:
操作代码
os模块:
os.path:常用函数
os.path: 常用函数
dirname() 获取指定文件的目录
join() 拼接获取新的路径
split() 分割(文件目录,文件名)
splittext() 分割(文件目录\文件名,文件的扩展名)
getsize() 获取文件大小
isabs() 判断是否是绝对路径
isfile() 判断是否是文件
isdir() 判断是否是文件夹
os常用函数
os模块下方法:
os.getcwd() 获取当前目录
os.listdir() 浏览文件夹
os.mkdir() 创建文件夹
os.rmdir() 删除空的文件夹
os.remove() 删除文件
os.chdir() 切换目录
'''
os.path: 常用函数
dirname() #获取当前文件所在文件夹路径
join() #拼接
split() #在文件和目录之间切一刀
splittext() #分割文件与扩展名
getsize() #获取文件的大小 单位字节
os.getcwd() #当前文件工作目录
isabs() #判断是否是绝对路径
isfile() #是否是文件
isdir() #是否是目录
'''
import os
#判断是否是绝对路径
r = os.path.isabs(r'E:\Python Script\openstack_landscape.jpg')
print('----》', r) #----》 True
r = os.path.isabs('../../images/girl.jpg') # ../ 表示返回当前文件的上一级 code
print('----->', r)
# 获取路径:directory 目录 文件夹
# 当前文件所在文件夹路径
path = os.path.dirname(__file__) # C:/Users/running/Desktop/python基础/day13(6-14)/代码/day13_文件/code/aa
print(path)
path = os.path.abspath('aa.txt')
print(path)
# 获取当前文件的绝对路径
path = os.path.abspath(__file__)
print(path)
#当前文件工作目录
path = os.getcwd() # 类似 os.path.dirname(__file__)
print(path)
#获取当前路径 是否是文件
r = os.path.isfile(os.getcwd())
print(r) #False
##获取当前路径 是否是目录
r = os.path.isdir(os.getcwd())
print(r) #True
#获取当前文件名
path = r'E:\2019千锋Python全套视频教程,史上最经典(193集)\2019版-千锋Python全套-源码+笔记+资料+作业\Week3(62集)\day13(9集)\代码\day13_文件\code\aa\file01.py'
#使用os.path.split 在文件和目录之间切一刀
result = os.path.split(path)
print(result) # 有了两个元组数据 #('E:\\2019千锋Python全套视频教程,史上最经典(193集)\\2019版-千锋Python全套-源码+笔记+资料+作业\\Week3(62集)\\day13(9集)\\代码\\day13_文件\\code\\aa', 'file01.py')
print(result[1]) #file01.py
# filename = path[path.rfind('\\')+1:]
# splitext分割文件与扩展名
result = os.path.splitext(path)
print(result) #一个文件扩展名前面部分,和文件扩展名
# 获取文件的大小 单位字节
size = os.path.getsize(path)
print(size) #1819
result = os.path.join(os.getcwd(), 'file', 'a', 'a1.jpg') #file\a\a1.jpg
#E:\2019千锋Python全套视频教程,史上最经典(193集)\2019版-千锋Python全套-源码+笔记+资料+作业\Week3(62集)\day13(9集)\代码\day13_文件\code\aa\file\a\a1.jpg
print(result)
OS 其他函数
'''
os模块下方法:
os.getcwd() 获取当前目录
os.listdir() 浏览文件夹
os.mkdir() 创建文件夹
os.rmdir() 删除空的文件夹
os.remove() 删除文件
os.chdir() 切换目录
'''
import os
dir = os.getcwd()
print(dir) #E:\2019千锋Python全套视频教程,史上最经典(193集)\2019版-千锋Python全套-源码+笔记+资料+作业\Week3(62集)\day13(9集)\代码\day13_文件\code\aa
all = os.listdir(r'E:\2019千锋Python全套视频教程,史上最经典(193集)') # 返回指定目录下的所有的文件和文件夹,保存到列表中
print(all) #['2019版-千锋Python全套-源码+笔记+资料+作业', '2019版-千锋Python全套-视频', '千锋Python学习路线图(1).jpg', '千锋Python学习路线图.jpg']
# 创建文件夹
if not os.path.exists(r'c:\p3'):
f = os.mkdir(r'c:\p3')
print(f) #None
# f = os.rmdir(r'c:\p3') # 只能删除空的文件夹 OSError: [WinError 145] 目录不是空的。: 'c:\\p3'
# print(f) #
#
# f = os.removedirs(r'c:\p3') # 只能删除空的文件夹 OSError: [WinError 145] 目录不是空的。: 'c:\\p3'
# print(f) #None
# os.remove(r'C:\p3\ff\dfd.rtf')
# path = r'C:\p3\ff'
# filelist = os.listdir(path)
# print('filelist:',filelist) #filelist: ['11.txt', '22.txt']
#
# for file in filelist:
# path1 = os.path.join(path,file)
# os.remove(path1)
# else:
# os.rmdir(path)
#
# print('Remove dir and file Success!') #Remove dir and file Success!
path = os.getcwd()
print('path:',path)
f = os.chdir(r'c:\p1')
print('f:',f) #None
path = os.getcwd()
print(path) #c:\p1
案例:图书馆
# 持久化保存:文件
# list 元组,字典---->内存
# 用户注册
def register():
username = input('输入用户名:')
password = input('输入密码:')
repassword = input('输入确认密码:')
if password == repassword:
# 保存信息
with open(r'c:\p1\book\users.txt', 'a') as wstream:
wstream.write('{} {}\n'.format(username, password))
print('用户注册成功!')
else:
print('密码不一致!')
# 用户登录
def login():
username = input('输入用户名:')
password = input('输入密码:')
if username and password:
# 打开文件查看
with open(r'c:\p1\book\users.txt') as rstream:
# 逐行读取内容
while True:
# 读取一行内容
user = rstream.readline() # admin 123456\n
# 判断有没有读取到内容
if not user:
print('用户名或者密码输入有误!')
break
# 构造比较格式
input_user = '{} {}\n'.format(username, password)
# 如果用户输入的跟文件中的内容一致则认为用户登录成功
if user == input_user:
print('用户登录成功!')
break
def show_books():
print('---------图书馆里面的图书有:----------')
with open(r'c:\p1\book\books.txt', 'r') as rstream:
books = rstream.readlines()
for book in books:
print(book, end='') # 因为读取的内容中有\n 所以取消print中自带的末尾换行
# 调用函数:
# register()
# login()
# show_books()
异常
# 语法错误和异常
# 语法错误:
# while True:
# print('-------')
# number = 100
#
#
# def func():
# global number
# number += 1
# 异常:程序运行的时候报出来的。xxxError
# def chu(a, b):
# return a / b
#
#
# x = chu(4, 2) # ZeroDivisionError: division by zero
# print('--------------->', x)
# 异常处理:
'''
格式:
try:
可能出现异常的代码
except:
如果有异常执行的代码
[finally:
无论是否存在异常都会被执行的代码]
情况1:
try:
有可能会产生多种异常
except 异常的类型1:
print(。。。。)
except 异常类型2:
pass
'''
def func():
try:
n1 = int(input('输入第一个数字:'))
n2 = int(input('输入第二个数字:'))
# + 加法
per = input('输入运算符号(+ - * /):')
result = 0
if per == '+':
result = n1 + n2
elif per == '-':
result = n1 - n2
elif per == '*':
result = n1 * n2
elif per == '/':
result = n1 / n2
else:
print('符号输入有误!')
print('结果是:', sum)
except ZeroDivisionError:
print('除数不能为零!!!!')
except ValueError:
print('必须输入数字!!!!')
except FileNotFoundError:
pass
except NameError:
pass
except Exception:
pass
func()
print('------------>')
异常2
'''
格式:
try:
可能出现异常的代码
except:
如果有异常执行的代码
[finally:
无论是否存在异常都会被执行的代码]
情况1:
try:
有可能会产生多种异常
except 异常类型1:
print(。。。。)
except 异常类型2:
pass
except Exception:
pass
如果是多个except,异常类型的顺序需要注意,最大的Exception要放到最后
情况2:获取Exception的错误原因
try:
有可能会产生多种异常
except 异常类型1:
print(。。。。)
except 异常类型2:
pass
except Exception as err:
print(err) ----> err的内容就是错误原因:
pop from empty list ---》 从空的列表中删除内容
。。。
'''
def func():
try:
n1 = int(input('输入第一个数字:'))
n2 = int(input('输入第二个数字:'))
# + 加法
per = input('输入运算符号(+ - * /):')
result = 0
if per == '+':
result = n1 + n2
elif per == '-':
result = n1 - n2
elif per == '*':
result = n1 * n2
elif per == '/':
result = n1 / n2
else:
print('符号输入有误!')
print('结果是:', result)
# 操作列表
list1 = []
list1.pop() #
# 文件操作
with open(r'c:\p1\aa.txt', 'r') as wstream:
print(wstream.read())
except ZeroDivisionError:
print('除数不能为零!!!!')
except ValueError:
print('必须输入数字!!!!')
except Exception as err:
print('出错啦!', err)
func()
print('------------>')
异常3
# 异常
'''
情况3:try...except..(多个except)...else
try:
有可能有异常的代码
except 类型1:
pass
..
else:
如果try中没有发生异常则进入的代码
注意: 如果使用else则在try代码中不能出现return
'''
def func():
try:
n1 = int(input('输入数字:'))
print(n1)
return 1
except ValueError:
print('必须是数字....')
return 2
else:
print('数字输入完毕!') # 没有异常才会执行的代码块
# 调用函数
func()
异常4
# 异常情况4
'''
# 文件操作 stream = open(...) stream.read() stream.close()
# 数据库操作 close()
try;
pass
except:
pass
finally:
pass
'''
def func():
stream = None
try:
stream = open(r'c:\p1\aa1.txt')
container = stream.read()
print(container)
stream.close()
return 1
except Exception as err:
print(err)
return 2
finally:
print('------finally-----')
if stream:
stream.close()
# return 3
x = func()
print(x) #会返回return 3 即使上面的return 1 如果finally里没有return 还是返回return 1
异常抛出异常 raise
# 抛出异常 raise
# 注册 用户名必须6位
def register():
username = input('输入用户名:')
if len(username) < 6:
raise Exception('用户长度必须6位以上')
else:
print('输入的用户名是:', username)
try:
register()
except Exception as err:
print(err)
print('注册失败!')
else:
print('注册成功!')
# print(a)