python 05.28
1.什么是文件
文件是操作系统提供的虚拟的单位,有了文件我们可以读取数据,没有文件的话应该去硬盘上扣动机械手臂然后寻找数据。
2.如何使用文件
①打开文件
②读写数据
③保存
④关闭文件
read:一次性读取所有数据
readline:读取一行,如果读完了所有数据,就读取则为空。
fr = open(r'C:\Users\Administrator\Desktop\pyton文件.txt',encoding='gbk')
# 相当于你打开的文件
print(fr.read()) # 一次性读取所有的内容
del fr # 只删除了变量名,但是文件对于操作系统来讲,还是打开状态的
fr.close() # 不仅删除了变量名f,并且也关闭了文件,这个时候文件对于操作系统来讲是关闭状态的
fw = open(r'C:\Users\Administrator\Desktop\pyton文件.txt',encoding='gbk') # 相当于你打开的文件
print(fw.write('Calvin')) # 写入内容, 清空文件后写入
fw.close() # 不仅删除了变量名f,并且也关闭了文件,这个时候文件对于操作系统来讲是关闭状态的
3.绝对路径和相对路径
绝对路径:从根目录开始,一直到你需要的文件路径
相对路径:从当前文件夹开始,到你需要的文件路径,要打开的文件必须和运行的py文件必须在同一个文件夹中
4.文件三种打开方式
mode='r'只读
mode='w'只写,清空文件再写入
mode=‘a'追加
rt:打开txt文本
fr = open(r'C:\Users\Administrator\Desktop\pyton文件.txt', mode='rt', encoding='gbk') # 默认r=rt
text_data = fr.read()
print(text_data)
rb:打开的bytes类型,二进制
r,r告诉你接下来的字符串,里面所有的特殊字符都变得没有意义
b表示,你写的字符串为二进制,在打印的时候不需要终端编码处理,直接输出原生的二进制编码即可。
t&b不能单独使用,必须得和r/w/a一起使用
r/w/a可单独使用
4.with管理上下文
with open(文件路径,打开模式(rt/wt/at/rb/wb/ab),编码格式) as 变量名
变量名:read/write
with open(r'C:\Users\Administrator\Desktop\pyton文件.txt',mode='r',encoding='utf8') as fr:
data=fr.read()
print(data)
5.文件的高级应用
r只读/w只写/a追加,可读可写(不推荐使用r+,w+,a+*
with open(r'C:\Users\Administrator\Desktop\pyton文件.txt',mode='r',encoding='utf8') as fr:
print(fr.readable())
print(fr.writable())
data=fr.readline()
print=(data)
with open(r'C:\Users\Administrator\Desktop\pyton文件.txt', 'w', encoding='utf8') as fw:
print(fw.readable())
print(fw.writable())
fw.write('nick handsome')
fw.flush()
with open(r'C:\Users\Administrator\Desktop\pyton文件.txt','r+',encoding='utf8') as fr:
print(fr.readable())
print(fr.writable())
data = fr.readline()
fr.write('nick handsome245234234')
fr.flush()
文件的写入没有插入一说,只有覆盖
指针(不要使用指针)
with open(r'C:\Users\Administrator\Desktop\pyton文件.txt','rt+',encoding='utf8') as fa:
fa.readline()
fa.seek(5, 0) # 字节算的
fa.seek(3, 1)
print(fa.tell()) # 告诉你光标当前的位置
print(fa.read(3)) # 光标后的字符个数,一个中文1个字符,3个字节;一个英文一个字符,一个字节
fa.truncate(3) # 如果它有参数,则光标会跳到指定字节数后,然后把后面的文件全部清空
fa.flush()
6.文件的拷贝
文件不能插入,但是有需求要修改文件,插入。
with open('test.txt', 'r',encoding='utf8') as fr:
print(fr.readlines())
for i in fr.readlines():
print(i)
print('*'*50)
for i in fr: # 这样获取更省内存
print(i)
print(fr)
# 减少了内存的占用
with open('test.txt', 'r', encoding='utf8') as fr, \
open('test_swap.txt', 'w', encoding='utf8') as fw: # w在清空文件,而不是write清空文件
'''
tank dsb
tank dsb
tank dsb
tank dsb
'''
for i in fr:
i = i.replace('sb', '帅逼')
fw.write(i)
import os
os.remove('test.txt')
os.rename('test_swap.txt', 'test.txt')

浙公网安备 33010602011771号