Python文件操作总结

Posted linshuhui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python文件操作总结相关的知识,希望对你有一定的参考价值。

一、文件操作的常用方法:

1、read():从光标位置开始读取整个文件剩下的内容,注意是从光标位置开始,不一定是读取整个文件。

#第一次读取:
f=open(test.txt,r)
print(f.read())
f.close()                  
#自恐多情损梵行,入山又怕误倾城.世间安得双全法,不负如来不负卿.
 作者:仓央嘉措

#第二次读取
f=open(test.txt,r)
f.readline()
print(f.read())        #作者:仓央嘉措
f.close()

2、readline和readlines的区别:

#readline()只读取一行,然后光标移动到下一行
f=open(test.txt,r)
print(f.readline())       #自恐多情损梵行,入山又怕误倾城.世间安得双全法,不负如来不负卿.
print(f.readline())     #作者:仓央嘉措
f.close()

#readllines()读取整个文件,然后把每一行当成一个元素存成一个列表。注意每个元素后后带有换号符
f=open(test.txt,r)
print(f.readlines())   #[‘自恐多情损梵行,入山又怕误倾城.世间安得双全法,不负如来不负卿.\n‘, ‘作者:仓央嘉措\n‘]
f.close()

#最后说明一点:readlines是把真个文件都一次性读写到内存中,如果文件小还好,一旦文件大了,会要命。文件大可以使用下面这种方法来读写:
with open(test.txt,r) as f:
    for line in f:
        print(line.strip())

#这样读写的好处就是一行一行读,并且读完就释放,完全不占用内存。

 

 

 3、write,writelines

f.write(1111\n222\n) #针对文本模式的写,需要自己写换行符
f.write(1111\n222\n.encode(utf-8)) #针对b模式的写,需要自己写换行符
f.writelines([333\n,444\n]) #文件模式
f.writelines([bytes(333\n,encoding=utf-8),444\n.encode(utf-8)]) #b模式

 

 4、其他方法:

f.readable() #文件是否可读
f.writable() #文件是否可读
f.closed #文件是否关闭
f.encoding #如果文件打开模式为b,则没有该属性
f.flush() #立刻将文件内容从内存刷到硬盘
f.name   #文件名

 二、文件光标的移动:

1、read(n)当文件打开方式为文本模式时,代表读取n个字符,文件打开方式为b模式时,代表读取n个字节

#1、以文本模式读取
with open(test.txt,r) as f:
    print(f.read(4))   #自恐多情

#2、以字节模式读取:
with open(test.txt,rb) as f:
    print(f.read(4).decode(gbk))         #自恐
#直接输出:print(f.read()) 输出为  b‘\xd7\xd4\xbf\xd6‘

 

2、tell()  获取当前文件指针所在的位置,没参数。以字节方式计算返回

with open(test.txt,r) as f:
    print(f.read(4)) #自恐多情
    print(f.tell())   #8

 

3、seek() 作用:用于移动文件读写指针到指定位置。

#函数的原型是:file.seek(offset,whence=0)
offset是指偏移量,whence有三个值,0,1,2。0代表移动到文件开头,1,指当前位置,2指文件末尾。 缺省则使用默认值0. 
#注意:使用参数1,2必须在字节模式b下打开文件!

with open(test.txt,r) as f:
    print(f.read(4)) #自恐多情
    print(f.tell())   #8
    f.seek(0,0)      #返回开头
    print(f.read(4))      #自恐多情



with open(test.txt,rb) as f:
    print(f.read(4).decode(gbk)) #自恐
    f.seek(-4,1)
    print(f.read(4).decode(gbk))  # 自恐


with open(test.txt,rb) as f:
    f.seek(-4,2)
    print(f.read(4).decode(gbk))   #嘉措

 

二、文件的修改:

  实际上我们平时说得修好某个文件的某个地方,实际是本质上并不是直接修改文件,而是覆盖。文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果,我们可以用下面的代码来模拟这过程。

import  os
with open(test.txt,r) as f ,open(test_1.txt,w) as f1:
    for line in f:
        line=line.replace(自恐多情损梵行,入山又怕误倾城.世间安得双全法,不负如来不负卿.,                          不恐多情损梵行, 唯恐入山误倾城.世间安得双全法,宁负如来不负卿.)
        line=line.replace(仓央嘉措,哟,写bug呢??)
        f1.write(line)

os.remove(test.txt)
os.rename(test_1.txt,test.txt)

以上是关于Python文件操作总结的主要内容,如果未能解决你的问题,请参考以下文章

我在哪里更改此 Python 代码片段以将临时文件保存在 tmp 文件夹中?

学习笔记:python3,代码片段(2017)

常用python日期日志获取内容循环的代码片段

VSCode自定义代码片段——git命令操作一个完整流程

使用 Python 代码片段编写 LaTeX 文档

VSCode自定义代码片段15——git命令操作一个完整流程