# 1、打开文件
# 路径:
# 相对路径:‘py.docx'
# 绝对路径:’D:\Python\路飞‘
# 模式
# rb,表示读取文件原始的二进制(r表示读取,b表示二进制)
# 只读:r、rt、rb (常用)r默认rt
# 存在:读
# 不存在:报错
# 只写:w、wt、wb (常用)w默认rt
# 存在:清空再写
# 不存在:创建再写
# 只写:x、xt、xb (基本不用)x默认rt
# 存在:报错
# 不存在:创建再写
# 只写:a、at、ab (少用)a默认rt
# 存在:尾部追加
# 不存在:创建再写
# 读写:
# r+、rb+、rb 默认光标位置在起始位置,先写后读的话,写入的内容会依次把已有内容覆盖,然后再读取光标后的内容,先读后写的话,会在尾部追加内容
# w+、wb+、wb+ 默认光标位置在起始位置,先写后读的话,会把原内容清空再写入,然后再读取光标后的内容,读取的内容为空
# x+、xb+、xb+
# a+、ab+、ab+ 默认光标位置在末尾
# 打开文件
file = open('222.txt',mode='rb')
# 读取内容,并赋值给date
data = file.read()
# 关闭文件
file.close()
print(data)
# 转换成utf-8,也即转换成字符串内容
text = data.decode('utf-8')
print(text)
# 直接读取字符串内容
file_02 = open(r'E:\迅雷下载\111.txt',mode='rt',encoding='utf-8')
data_02 = file_02.read()
file_02.close()
print(data_02)
# windows绝对路径表示法:用反斜杠,或者双斜杠:如E:\\迅雷下载\\111.txt,或者:r'E:\迅雷下载\111.txt'
# 判断路径是否存在
import os
a = os.path.exists('E:\\迅雷下载\\111.txt')
print(a) # 结果True 或者False
# 打开图片文件
file_01 = open('一寸照.JPG',mode='rb')
# 读取内容,并赋值给date_01
date_01 = file_01.read()
# 关闭文件
file_01.close()
print(date_01)
# 2、写文件
# 方法一
file_03 = open('123.txt',mode='wb')
file_03.write('四大天王'.encode('utf-8'))
file_03.close()
# 方法二
file_03 = open('123.txt',mode='wt',encoding='utf-8') # encoding='utf-8'可以不用,系统默认
file_03.write('四大天王')
file_03.close()
# 3、图片文件写入
# 方法:先读取原图二进制内容,再写入到新文件
file_04 = open('一寸照02.JPG',mode='wb')
file_04.write(date_01)
file_04.close()
# 注意:w写入默认清空原先内容
# 案例:如何重复写入
file_05 = open('anli.txt',mode='wt',encoding='utf-8') # 不要循环的时候重复打开,否则前面内容会被清空
while True:
user_name = input('请输入用户名:')
if user_name.upper() == 'Q':
break
user_pass = input('请输入密码:')
user_info = f'用户名是:{user_name},密码是{user_pass}\n'
file_05.write(user_info)
file_05.close() # 要在循环结束后关闭,否则会报错
# 案例二,网络读取图片
import requests
file_06 = requests.get(url="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fhbimg.b0.upaiyun.com%2F7d4449c626791befe159cc90b01426256172153125db3-uL8GcZ_fw658&refer=http%3A%2F%2Fhbimg.b0.upaiyun.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1635870045&t=94d326be0b5d20949fc9d5d772caf01f")
file_07 = open('meinv.png',mode='wb')
file_07.write(file_06.content)
file_07.close()
# 4、读写一:r+
# 设置原文件”123.txt“内容为”四小天王“
# 案例一:先读后写
file_08 = open('123.txt',mode='rt+',encoding='utf-8')
file_09 = file_08.read()
print(file_09) # 输出:四小天王
file_08.write('齐天大圣') # 输出文件内容为:四小天王齐天大圣
# 案例二:先写后读
file_08 = open('123.txt',mode='rt+',encoding='utf-8')
file_08.write('齐天') # 输出文件内容为:齐天天王
file_09 = file_08.read()
print(file_09) # 输出:天王
# 4、读写一:w+
# 设置原文件”123.txt“内容为”四小天王“
# 案例一:先读后写
file_10 = open('123.txt',mode='w+',encoding='utf-8') # 清空文件内容
file_11 = file_10.read()
print(file_11) # 输出为空
file_10.write('我是谁') # 输出文件内容:我是谁
# 案例二:先写后读
file_10 = open('123.txt',mode='w+',encoding='utf-8') # 清空文件内容
file_10.write('我是谁') # 输出文件内容:我是谁
file_11 = file_10.read()
print(file_11) # 输出为空
# 5、读写一:a+
# 设置原文件”123.txt“内容为”四小天王“
# 案例一:先读后写
file_10 = open('123.txt',mode='a+',encoding='utf-8')
file_11 = file_10.read()
print(file_11) # 输出为空
file_10.write('我是谁') # 输出文件内容:四小天王我是谁
# 案例二:先写后读
file_10 = open('123.txt',mode='a+',encoding='utf-8')
file_10.write('我是谁') # 输出文件内容:四小天王我是谁
file_10.seek(0) # 把光标移到第一个位置,就可以顺利读取全部内容
file_11 = file_10.read()
print(file_11) # 输出:四小天王我是谁