python文件处理——读取和写入
1、
计算机系统分为:计算机硬件,操作系统,应用程序三部分。
我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。
操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来,
所以说操作系统就是应用程序/用户和硬件之间的承上启下的桥梁,两者之间的交流必须要通过操作系统来完成。
2.文件的存储方式
在计算机中,文件时以二进制的方式保存在磁盘中的;
文本文件可以使用文本编辑软件进行操作,但是本质上海事二进制文件;
二进制文件保存的内容不是给人直接阅读的,而是提供给其他软件使用的(图片文件,音频文件,视频文件等等,用相应的软件进行查看);
二进制文件不能使用文本标记软件进行查看。
3.操作文件的流程:
1.打开文件,得到文件句柄并赋值给一个变量;
2.通过句柄对文件进行操作;
3.关闭文件。
f=open("a.txt")
data=f.read()
print(data)
f.close()
##############################
以下是您的激活码,
本文档已经自动保存到您的桌面,
如果更换电脑或者重做操作系统,可以使用激活码找回剩余流量。
官宣!上港老总担任足协换届筹备组组长 有望成新一届足协主席。
北京时间5月24日消息,中国足协召开执委扩大会,宣布上港集团董事长陈戌源担任足协换届筹备组组长!
由于新一届足代会还未召开,蔡振华仍是名义上的足协主席,足代会最快将在六月中下旬召开,届时,陈戌源将成为中国足协主席。
中国足球协会成立中国足协换届筹备组,宣布陈戌源同志担任筹备组组长,筹备组负责拟定换届工作方案,筹备召开中国足协代表大会。
这意味着,陈戌源将出任中国足协主席。
接下来,陈戌源将开启职业联盟改革。
第一,中超赛事的竞赛组织交给联盟,市场开发和管理,都是联盟说了算;
第二,按照国际足联的规则去运作,要尊重足球发展规律;中超联盟成立和起步后,推动职业化发展,帮助培育俱乐部形成自我发展。
【了解】文件指针
文件指针标记从哪个位置开始读取数据;
当第一次打开文件时,通常文件指针会指向文件的开始位置;
当执行了read方法之后,文件指针会移动到读取内容的末尾(默认情况下);
所以说当再次有read方法就会没有内容(默认情况下)。
注意:
一定要关闭文件,当然了也可以使用with关键字来进行处理。
这样也就不用close了。
with open("a.txt") as f: data=f.read() print(data)
4.文件操作基本用法 (1)基本用法: file_object = open(file_name, access_mode = ‘r’, buffering = -1) open函数有很多的参数,常用的是file_name,mode和encoding file_name:打开的文件名,若非当前路径,需指出具体路径 access_mode文件打开模式 buffering的可取值有0,1,>1三个,0代表buffer(缓冲器)关闭(只适用于二进制模式),1代表line buffer(只适用于文本模式),
>1表示初始化的buffer大小; encoding表示的是返回的数据采用何种编码,一般采用utf8或者gbk,所以说若要保证不乱码,文件以什么方式打开。
(2)文件打开模式
r ,只读模式【默认模式,文件必须存在于同一个路径下,不在的话,则抛出异常,所以说,不在一起时候,要使用绝对路径】
w, 只写模式【不可读;不存在则创建;存在则清空内容;在不在同一个路径下都不会报错,不存在的话就会新创建】
x, 只写模式【不可读;不存在则创建,存在则报错】
a, 追加模式【可读; 不存在则创建;存在则只追加内容】,文件指针自动移到文件尾。
"+" 表示可以同时读写某个文件
r+, 读写【可读,可写】
w+,写读【可读,可写】,消除文件内容,然后以读写方式打开文件。
x+ ,写读【可读,可写】
a+, 写读【可读,可写】,以读写方式打开文件,并把文件指针移到文件尾,也就是说不会覆盖之前文件中有的内容,而是将写入到文件的内容都添加到文 件末尾。
二进制模式,通常用来读取图片、视频等二进制文件。注意,它在读写的时候是以bytes类型读写的,因此获得的是一个bytes对象而不是字符串。在这个读写过程中,需要自己指定编码格式。在使用带b的模式时一定要注意传入的数据类型,确保为bytes类型。
s='I love China' b=bytes(s,encoding='utf-8') f=open('test.txt','wb') #f.write(s) # TypeError: a bytes-like object is required, not 'str' ##意思是它需要一个bytes类型数据,你却给了个字符串 f.write(b)# 正确
"b"表示以字节的方式操作,以二进制模式打开文件,而不是以文本模式。
rb 或 r+b
wb 或 w+b
xb 或 w+b
ab 或 a+b
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码。
对于w+模式,在读写之前都会清空文件的内容,建议不要使用!
对于a+模式,永远只能在文件的末尾写入,有局限性,建议不要使用!
对于r+模式,也就是读写模式,配合seek()和tell()方法,可以实现更多操作。
r+ 可读可写,先写的话,从头开始覆盖写,接着读的话就读光标之后的内容,读写跟着光标走;
如果要写入中文,则要注意编码。
(3)文件内光标移动
f=open('b.txt','r+',encoding='utf-8',newline='') #读取文件中真正的换行符号
f.flush() 将文件内容从内存刷到硬盘
f.closed #文件如果关闭则返回True
f.encoding #查看使用open打开文件的编码
f.tell() #查看文件处理当前的光标位置
seek() 方法语法如下:
参数
-
offset -- 开始的偏移量,也就是代表需要移动偏移的字节数
-
whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,
-
2代表从文件末尾算起。
-
f=open('日志文件','rb') -
for i in f: -
offs=-10
while True:
f.seek(offs,2)
data=f.readlines()
if len(data) > 1:
print('文件的最后一行是%s' %(data[-1].decode('utf-8')))
break
offs*=2 -
f.truncate(size) -
#方法用于从文件的首行首字符开始截断,将文件只保留从0-size个字节,截断文件为 size 个字符,无 size 表示从当前位置截断; -
截断之后 V 后面的所有字符被删除,文件必须以写方式打开,但是w和w+除外
(4)逐行读取文件
f=open("a.txt")
while True:
data=f.read()
# 判断是否读取到数据
if not data:
break
print(data)
f.close()
#######################
以下是您的激活码,
本文档已经自动保存到您的桌面,
如果更换电脑或者重做操作系统,可以使用激活码找回剩余流量。
官宣!上港老总担任足协换届筹备组组长 有望成新一届足协主席。
北京时间5月24日消息,中国足协召开执委扩大会,宣布上港集团董事长陈戌源担任足协换届筹备组组长!
由于新一届足代会还未召开,蔡振华仍是名义上的足协主席,足代会最快将在六月中下旬召开,届时,陈戌源将成为中国足协主席。
中国足球协会成立中国足协换届筹备组,宣布陈戌源同志担任筹备组组长,筹备组负责拟定换届工作方案,筹备召开中国足协代表大会。
这意味着,陈戌源将出任中国足协主席。
接下来,陈戌源将开启职业联盟改革。
第一,中超赛事的竞赛组织交给联盟,市场开发和管理,都是联盟说了算;
第二,按照国际足联的规则去运作,要尊重足球发展规律;中超联盟成立和起步后,推动职业化发展,帮助培育俱乐部形成自我发展。
with open('aaa.txt') as read_f:
data=read_f.readlines()
for item in data:
print(item)
###############
2154.3657892
4572.321458754
0.124875996
1.25487
2355644
(5)写入文件
with open('aaa.txt',"w+") as read_f:
data1=read_f.write("小猪猪")
data2=read_f.readlines()
for item in data2:
print(item)
如果文件之前有内容,在使用W+模式时,会把之前的内容消除掉,再把后面的内容写入;
在写入多行时,write()不会再写入的文本末尾添加换行符,所有在后面要加上换行符。
(6)复制文件
小文件复制:
# 1.打开
file_read=open("a.txt")
file_write=open("a_copy.txt","w")
# 2.读、写
data=file_read.read()
file_write.write(data)
# 3.关闭
file_read.close()
file_write.close()
【要准备一个空文件a_copy.txt】
大文件复制:
# 1.打开 file_read=open("a.txt") file_write=open("a_copy.txt","w") # 2.读、写 while True: data=file_read.readline() if not data: break file_write.write(data) # 3.关闭 file_read.close() file_write.close()


浙公网安备 33010602011771号