文件操作
mode: r w 纯文本文件
rb wb 二进制字节文件:纯文本,图片,音乐,电影
文件上传:
保存log
系统函数:
open(file,mode,buffering,encodeing)
读:
open(path/filename,‘rt’) 返回值是一个流:stream(管道)
注意:如果传递的path/filename有误,则会报错:FileNotFoundError
read()读取所有行
readline()每次读取一行内容
readlines()读取所有的行的内容,并将其放到列表中
readable() 判断是否可读取

#open的默认是rt,读取文本文档,如果是图片,就不能使用默认的读取方式
stream=open(r'aa.txt')
container=stream.read()
print(container)

#判断文件是否可以读取,返回true或者false
result=stream.readable()
print(result)

line=stream.readline()
print(line)
#只读取一行内容
while True:
    line=stream.readline()
    print(line)
    if not line:
        break
#将数据保存到列表中    
lines=stream.readlines()
print(lines)
for i in lines:
    print(i)

读出的文件是r 还是w
取决于open中的model
stream=open(r’aa.txt’,‘w’)
方法:
write()
注意:write(内容)每次关闭打开后再写都会重写文件的内容

stream=open(r'aa.txt','w')
s='''
   你好
   欢迎来到你的学校
         你的朋友
'''
result=stream.write(s)
print(result)
stream.close()
stream=open('aa.txt','w')
result=stream.write('龙武')
print(result)

列表可迭代的,可以在写入的时候加入多个要写入的内容,不会换行
write(Iterable)没有换行的效果
stream.writelines([‘独身京东健康借款方\n’,‘dehrjhjk\n’]) 自己加换行

如果mode=‘a’,不会删除原来的内容,在原来的文件基础上去追加

stream=open(r'aa.txt','w')
stream.write('龙武')
stream.writelines(['独身京东健康借款方','dehrjhjk'])
print(result)

stream=open(r'aa.txt','w')
stream.write('龙武')
stream.writelines(['独身京东健康借款方\n','dehrjhjk\n'])
print(result)
stream=open(r'aa.txt','w')
s='''
   你好
   欢迎来到你的学校
         你的朋友
'''
result=stream.write(s)
print(result)
stream.close()

stream=open(r'aa.txt','a')
stream.write('龙武')
stream.writelines(['独身京东健康借款方\n','dehrjhjk\n'])
print(result)

文件复制
在添加文件复制的目的路径时,注意添加完整的路径

#stream=open(r'aaa.jpg','rb')
with open(r'aaa.jpg','rb') as stream:
    container=stream.read()#读取文件内容
    with open(r'E:\python\python_practice\copy\aaa.jpg','wb') as wstream:
        wstream.write(container)
print('文件复制完成')

批量复制
os模块

import os
print(os.path)
path=os.path.dirname(__file__) #获取当前文件所在的文件目录(绝对路径)
print(path)
print(type(path))

with open(r'aaa.jpg','rb') as stream:
    container=stream.read()#读取文件内容
    
    path=os.path.dirname(__file__)
    path1=os.path.join(path,'a1.jpg')
    
    with open(path1,'wb') as wstream:
        wstream.write(container)
print('文件复制完成')

原名的形式保存

with open(r'E:\python\python_practice\aaa.jpg','rb') as stream:
    container=stream.read()#读取文件内容
    print(stream.name)
    file=stream.name
    filename=file[file.rfind('\\')+1:]#截取文件名
    
    path=os.path.dirname(__file__)
    path1=os.path.join(path,filename)
    
    with open(path1,'wb') as wstream:
        wstream.write(container)
print('文件复制完成')

os模块下的方法:
os.getcwd()获取当前目录
os.listdir() 浏览文件夹
os.mkdir()创建文件夹
os.remdir()删除空的文件夹
os.remove()删除文件
os.chdir()切换目录

#切换目录
f=os.chdir(r'E:\python\python_practice')
path=os.getcwd()
print(path)

open不能打开一个文件夹,必须要定义到一个文件
有多种不同文件,用rb或者wb来读和写。

import os
src_path='E:\python\python_practice\copy1'
target_path='E:\python\python_practice\copy'
def copy(src,target):
    #判断是不是文件夹
    if os.path.isdir(src) and os.path.isdir(target):
        #浏览文件夹,取东西
        filelist=os.listdir(src)
    
        for file in filelist:
            path=os.path.join(src,file)
            with open(path,'rb')as rstream:
                container=rstream.read()
                path1=os.path.join(target, file)
                with open(path1,'wb') as wstream:
                    wstream.write(container)
    else:
        print('复制完毕!')
copy(src_path, target_path)

文件:
文件操作:
open()
path.filename:
path:
绝对路径:E:\python\python_practice
相对路径:相对当前文件的路径。返回上层目录:…/
mode:
读:rb r
写:wb w
with open(file,mode) as stream :
操作代码
os模块:
os.path:常用函数
dirname() 获取指定文件的目录
join()拼接获取新的路径
split() 分割(文件目录,文件名)
splittext() 分割(文件目录\文件名,文件扩展名)

import os
src_path='E:\python\python_practice\copy1'
target_path='E:\python\python_practice\copy'    

def copy(src_path,target_path):
    #获取文件夹内容
    filelist=os.listdir(src_path)
    print(filelist)
    #遍历列表内容
    for file in filelist:
        #拼接路径
        path=os.path.join(src_path, file)
        #判断是否是文件夹
        if os.path.isdir(path):
            #递归调用
           copy(path, target_path)
           
            
            #os.chdir(path)
            #os.listdir(path)
            #filelist1=os.listdir(path)
            #for file1 in filelist1:
             #   path=os.path.join(src_path, file)
            
        else:
            #不是文件夹直接复制
            with open(path,'rb') as rstream:
                container=rstream.read()
            
            path1=os.path.join(target_path,file)
            with open(path1,'wb') as wstream:
                wstream.write(container)
    else:
        print('复制')
copy(src_path,target_path)

持久化保存:文件
list 元组,字典——》内存

#用户注册
def register():
    username=input('输入用户名:')
    password=input('输入密码:')
    repassword=input('输入确认密码:')
    if password==repassword:
        #保存信息
        with open(r'E:\python\python_practice\copy\user.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'E:\python\python_practice\copy\user.txt')as rstream:
            while True:
                user=rstream.readline()
                
                if not user:
                    print('用户名或者密码输入有误!')
                    break
                
                input_user='{}{}\n'.format(username, password)
                
                if user==input_user:
                    print('用户登录成功!')
                    break
                
def show_books():
    print('............图书馆的图书有:·············')
    with open(r'E:\python\python_practice\copy\book.txt','r') as rstream:
        books=rstream.readlines()
        for book in books:
            print(book,end='')

语法错误和异常
语法错误:可以避免的
异常:运行时才会报错

def chu(a,b):
    return a/b

格式:
try:
可能出现异常的代码
except:
如果有异常执行的代码
finally:
无论是否存在异常都会被执行的代码
情况1:
try:
有可能会出现多种异常
except 异常类型1:
print()
except 异常类型2:
pass
except Exception as err:
print(err) ---------》err的内容就是错误的原因
pop from empty list

如果是多个except,异常类型的顺序需要注意,最大的Exception要放到最后