Python学习之==>文件操作

文件基本操作:

m = open('words',encoding='utf-8')#打开文件(python默认字符集为utf-8,windows为gbk),不输入模式默认为r模式
print(m.read()) #读文件
print(m.readline()) #读取第一行
print(m.readlines()) #把文件的每一行放到一个list里面

打开文件的模式:

r,只读模式(默认)【不可写;文件不存在,会报错】
w,只写模式【不可读;不存在则创建;存在则删除内容;】
a,追加模式【不可读; 不存在则创建;存在则只追加内容;】
r+,读写模式【可读、可写;可追加,如果打开的文件不存在的话,会报错】
w+,写读模式【使用w+的话,已经存在的文件内容会被清空,可以读到已经写的文件内容】
a+,追加读写模式【不存在则创建;存在则只追加内容;】

文件操作方法:

f = open('file.txt','r+',encoding='utf-8')  # encoding参数可以指定文件的编码
f.readline() # 读一行
f.readable() # 判断文件是否可读
f.writable() # 判断文件是否可写
f.encoding # 打印文件的编码
f.read() # 读取所有内容,大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆
f.readlines() # 读取所有文件内容,返回一个list,元素是每行的数据,大文件时不要用,原因和上面一样
f.tell() # 获取当前文件的指针指向
f.seek(0) # 把当前文件指针指向哪
f.write('爱情证书') # 写入内容
f.fulsh() # 写入文件后,立即从内存中把数据写到磁盘中
f.truncate() # 清空文件内容
f.writelines(['爱情证书' ,'孙燕姿']) # 将一个列表写入文件中
f.close() #关闭文件

大文件读取高效操作方法:

用上面的read()和readlines()方法操作文件的话,会先把文件所有内容读到内存中,这样的话,内存数据一多,非常卡,高效的操作,就是读一行操作一行,读过的内容就从内存中释放了,如下:

f = open('file.txt')
for line in f:
print(line)
# 这样的话,line就是每行文件的内容,读完一行的话,就会释放一行的内存

文件指针:

# 用来记录文件读到哪里
m = open('name','a+',encoding='utf-8')# a模式的文件指针是在末尾的
m.write('呃呃呃')
m.seek(0) #移动文件指针到最前面
print(m.read())
m.write('呵呵呵') #移动完文件指针之后,从前面开始读,但写的时候还是在文件末尾写
m.seek(0)
print(m.read())

自动关文件:

在操作文件的时候,经常会忘了关闭文件。可以使用with,它会在使用完这个文件句柄之后,自动关闭该文件,使用方式如下:

with open('file.txt', 'r') as f:# 打开一个文件,把这个文件的句柄付给f
for line in f:
print(line)
with open('file.txt') as fr,open('file_bak', 'w') as fw:# 这个是多文件的操作,打开两个文件,fr是读file.txt,fw是新建一个file_bak文件
for line in fr:# 循环file.txt中的每一行
fw.write(line)# 写到file_bak文件中

修改文件:

修改文件有两种方式:

       1、一种是把文件的全部内容都读到内存中,然后把原有的文件内容清空,重新写新的内容。

       2、第二种是把修改后的文件内容写到一个新的文件中。

第一种方式:

with open('file.txt','r+') as fr:
res = fr.read()
new_res = res.replace('我' ,'me')
fr.truncate()
fr.write(new_res)

第二种方式:

# 这个是多文件的操作,打开两个文件,fr是读file.txt,fw是新建一个file_bak文件
import os
with open('file') as fr,open('new_file','w') as fw:
for line in fr: # 循环file.txt中的每一行
new_line = line.replace('花','flower')
fw.write(new_line) # 写到file_bak文件中
os.remove('file') # 删除文件
os.rename('new_file','file') # 改名

f.write()和f.writelines

# f.write()只能写字符串
a = ['abc\n','123\n','!@#']
f = open('name','w')
for i in a:
f.write(i)

# f.writelines()会循环把list当中的元素写入文件
a = ['abc\n','123\n','!@#']
f = open('name','w')
f.writelines(a)

猜你喜欢

转载自www.cnblogs.com/L-Test/p/8983190.html