标签:基础 int 相对路径 code 个数 offset 路径 手动 enc
文件是操作系统提供的虚拟的单位,有了文件我们可以读取数据,没有文件的话应该去硬盘上扣动机械手臂后寻找数据。
文件的核心是:读和写
内存无法永久保存数据,想要永久保存数据都需要把文件保存到硬盘中,而操作文件就可以实现对硬件的操作。
打开文件()
读写数据
保存
关闭文件
使用Python写一个小程序控制文件
#print(fr.read()) #read一次性读取所有数据
#fr.close() #不仅删除了变量名 f, 并且也关闭了文件,这个时候文件对于操作系统来讲是关闭状态的
打开文件的那一瞬间是在操作硬盘和内存
python3能操控硬盘和内存吗?一定不能,因为他是应用程序。
你看到的Python3打开文件并操控,都是基于操作系统的。
然后你只是使用了 del f ,只是在删除f这个变量名的内存占用。但是我们从来都没有告诉操作系统关闭文件
所以我们必须使用f.close()关闭文件
绝对路径:从根目录开始,一直到需要的文件路径
相对路径:从当前文件夹开始,到需要的文件路径,只需要输入文件路径,要打开的文件和运行的py文件必须得在一个文件夹下
文件操作的基础模式有三种(默认的操作模式为r模式)
# mode='r', r模式为read,只读模式,只能读不能写,文件不存在时报错。
# mode='w', w模式为write,只写,清空文件在写入
# mode='a', a模式为append,追加,在后面追加写入文件
文件读写内容的格式有两种(默认的读写内容的模式为b模式):
t模式为text
b模式为bytes
需要注意的是:t、b这两种模式均不能单独使用,都需要与r/w/a之一连用。
#mode='rb', #打开的bytes类型,二进制#0101000011
fr=open(r'D:\Python视频\Python9期视频\day 09\test.txt',mode='rb') #默认r=rt
print(fr)
bytes_data=fr.read()
print(bytes_data)
##r , r告诉接下来的字符串,里面所有的特殊字符都变得无意义
##b表示,写的字符串为二进制,在打印时候不需要使用终端的编码处理,直接打印原生的二进制即可。
#r/w/a能单独使用。
之前使用open()方法操作文件,但是open打开文件文件后我们还需要手动释放文件对操作系统的占用。
Python提供的上下文管理工具更方便-------with open(),不仅提供自动释放操作系统占用的方法,并且with open可以使用逗号分隔,一次性打开多个文件,实现文件的快速拷贝。
#with open(文件路径,打开模式(rt/wt/at/wb/ab),编码格式) as 变量名:
#变量名.read/wite
with open('test.txt','r',encoding='utf8') as fr:
data=fr.read()
print(data)
r只读/w只写/a追加,可读可写(不推荐使用),r+,w+,a+
# 指针(不要使用指针)
with open('test.txt','rt+',encoding='utf8') as fa:
# 3个字节,
# fa.readline()
fa.seek(5, 0) # 字节算的
# fa.seek(3, 1)
print(fa.tell()) # 告诉你光标当前的位置
print(fa.read(3)) # 光标后的字符个数,一个中文1个字符,3个字节;一个英文一个字符,一个字节
fa.truncate(3) # 如果它有参数,则光标会跳到指定字节数后,然后把后面的文件全部清空
fa.flush()
nick 中文 245234234
中文45234234 # 没有seek(3,0) # 0表示文件头
nic中文34234 # 有seek(3,0),seek(3,0)
nick 245234234中文 # 有seek(0,2) # 2表示文件末尾
nick 2a5234234 # 有seek(3,1),seek(3,1) # 1表示当前位置,但是必须得以二进制的形式打开
'''
# 文件的写入没有插入一说,只有覆盖
假设我们需要在文件内容中间的某一行增加内容,如果使用基础的r/w/a模式实现是非常困难的,因此我们需要对文件内的指针进行移动。
硬盘上从来没有修改一说,硬盘上只有覆盖,即新内容覆盖新内容
文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果,具体的说有两种实现方式
将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)
将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件。
文件不能插入,但是有需求要修改文件,插入。
总结:
qq想修改这个程序,微信也想修改这个程序,两者都已经读取文件成功,都拿到了‘tank handsome‘
qq想修改’tank handsome‘中的‘h’为‘a’,微信想把‘h‘修改为‘b’,这两个修改一定有先后顺序,假如qq先修改了,那么‘h’已经变成了‘a’,微信就找不到‘h‘了,报错。
qq想修改’tank handsome‘中的‘h’为‘a’,微信想把‘h‘修改为‘b’,所以给qq一份拷贝文件,给微信一份拷贝文件,让他们各自修改,修改成功后,删除原文件,修改替换后的文件名为原文件。
w在清空文件,而不是wite清空文件
with open(filename,mode,encoding) as file: file+操作
rt/rb/wt/at
文件的复制
标签:基础 int 相对路径 code 个数 offset 路径 手动 enc
原文地址:https://www.cnblogs.com/zhoajiahao/p/10940236.html