python文件的操作
Posted saoqiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python文件的操作相关的知识,希望对你有一定的参考价值。
文件的读 单纯读 不更改
f = open(r‘d:\\社会人.txt‘,mode=‘r‘,encoding=‘utf-8‘)
content = f.read()
print(content)
close()
总体格式:f: 就是一个变量,一般都会将它写成f,f_obj,file,f_handler,fh,等,它被称作文件句柄
为open:是Python调用的操作系统(windows,linux,等)的功能。
r‘d:\\社会人.txt‘: 这个是文件的路径。 同一目录下"社会人"
mode: 就是定义你的操作方式:r为读模式。
encoding: 不是具体的编码或者解码,他就是声明:此次打开文件使用什么编码本。一般来说:你的文件用什么编码保存的,就用什么方法打开,一般都是用utf-8(有些使用的是gbk)。
f.read():你想操作文件,比如读文件,给文件写内容,等等,都必须通过文件句柄进行操作。
2.1.1 read()
read()将文件中的内容全部读取出来;弊端 如果文件很大就会非常的占用内存,容易导致内存奔溃
read(n)读取的时候指定读取到什么位置,在r模式下,n按照字符读取。.
readline()读取每次只读取一行,注意点:readline()读取出来的数据在后面都有一个\\n
f = open(r‘path1/社会人.txt‘,mode=‘r‘,encoding=‘utf-8‘) msg4 = f.readline().strip()
f.close()
print(msg4)
readlines() 返回一个列表,列表里面每个元素是原文件的每一行,如果文件很大,占内存,容易崩盘。 待续
f = open(‘log‘,encoding=‘utf-8‘)
print(f.readlines())
f.close()
# 结果[‘666666\\n‘, ‘fkja l;\\n‘, ‘fdkslfaj\\n‘, ‘dfsflj\\n‘, ‘df;asdlf\\n‘, ‘\\n‘, ]
最好的方式 可以通过for循环去读取,文件句柄是一个迭代器,他的特点就是每次循环只在内存中占一行的数据,非常节省内存。f = open(‘../path1/社会人.txt‘,mode=‘r‘,encoding=‘utf-8‘)
for line in f:
print(line) #这种方式就是在一行一行的进行读取,它就执行了下边的功能,代码如下
f = open(‘../path1/弟子规‘,mode=‘r‘,encoding=‘utf-8‘)
for line in f:
print(line) #这种方式就是在一行一行的进行读取,它就执行了下边的功能
print(f.readline())
print(f.readline())
print(f.readline())
print(f.readline())
f.close()
注意点:读完的文件句柄一定要关闭
close(): 关闭文件句柄(可以把文件句柄理解成一个空间,这个空间存在内存中,必须要主动关闭)。
rb模式:以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。记住下面讲的也是一样,带b的都是以二进制的格式操作文件,他们主要是操作非文字文件:图片,音频,视频等,并且如果你要是带有b的模式操作文件,那么不用声明编码方式。
文件的写 如果文件存在,利用w模式操作文件,先清空原文件内容,在写入新内容。
如果文件不存在,利用w模式操作文件,那么它会先创建文件,然后写入内容.
非文本格式 rb的模式将一个图片的内容以bytes类型全部读取出来,然后在以wb将全部读取出来的数据写入一个新文件,这样我就完成了类似于一个图片复制的流程 先转化 在写人
打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
如果文件不存在,利用a模式操作文件,那么它会先创建文件,然后写入内容。 代码待续
r+ 读写模式,w+写读模式
r+: 打开一个文件用于读写。文件指针默认将会放在文件的开头。注意:如果你在读写模式下,先写后读,那么文件就会出问题,因为默认光标是在文件的最开始,你要是先写,则写入的内容会讲原内容覆盖掉,直到覆盖到你写完的内容,然后在后面开始读取。 代码后续
6.1 read(n)
1. 文件打开方式为文本模式时,代表读取n个字符
2. 文件打开方式为b模式时,代表读取n个字节
重要 eek(n)光标移动到n位置,注意: 移动单位是byte,所有如果是utf-8的中文部分要是3的倍数
通常我们使用seek都是移动到开头或者结尾
移动到开头:seek(0)
移动到结尾:seek(0,2) seek的第二个参数表示的是从哪个位置进行偏移,默认是0,表示开头,1表示当前位置,2表示结尾 代码如下
f = open("小娃娃", mode="r+", encoding="utf-8")
f.seek(0) # 光标移动到开头
content = f.read() # 读取内容, 此时光标移动到结尾
print(content)
f.seek(0) # 再次将光标移动到开头
f.seek(0, 2) # 将光标移动到结尾
content2 = f.read() # 读取内容. 什么都没有
print(content2)
f.seek(0) # 移动到开头
f.write("张国荣") # 写入信息. 此时光标在9 中文3 * 3个 = 9
f.flush()
f.close()
文件修改
式一:将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)
式二:将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件 例题如下待续
以上是关于python文件的操作的主要内容,如果未能解决你的问题,请参考以下文章