文件处理简介与只读、只写、只追加三种打开模式 您所在的位置:网站首页 什么是追加 文件处理简介与只读、只写、只追加三种打开模式

文件处理简介与只读、只写、只追加三种打开模式

2024-06-03 21:17| 来源: 网络整理| 查看: 265

文件处理的基本操作: 1.打开文件得到文件句柄并赋值给一个变量。( 变量=open(“文件名”,“模式”, encoding="解码方式”) 操作即为得到文件句柄并赋值给变量的过程。) 2.通过文件句柄对文件进行操作。( 变量.操作() ) 3.关闭文件。( f.close() 语句)

其中,如果被打开文件在当前操作文件的同一硬盘文件位置则可以只输入相对路径,如果不在同一硬盘文件路径则必须输入绝对路径。

open语句相当于从操作系统要了一种操作方式,以这种方式对硬盘上的数据进行操作。

open语句默认会以检测到的系统编码为文件解码方式,而Windows为gbk编码。

打开模式分为只读模式(“r”),只写模式(“w”),只追加模式(“a”),此外还有r+、w+、a+的读写模式。

硬盘中储存文件的文件数据是不可修改的,文件的修改是通过读入内存中,在内存中储存的文件内容是可以修改的,在内存中修改后覆盖原始文件。

不论是只读还是只写或是只追加,他们的encoding参数代表的是从硬盘读出时或者往硬盘写入时的数据类型,再读入内存后数据均为unicode编码

软件实现文本内容修改的机制:将原始文件读入内存中,在内存中将修改完成后生成新文件,让新文件去覆盖旧文件。

只读模式 在只读模式下,只可以把硬盘上的文件以指定的编码方式读入内存。 注意读取会按照光标位置读取,在.read()语句读取完整个文件后光标已经移到了文件内容的末尾,此时再掉用.readline()语句则不会读取到任何内容。 .read()语句 表示读取整个文件内容

#有以Test1命名的以UTF-8编码储存在硬盘同一位置的txt文件 f = open("Test1", "r", encoding="utf8") data = f.read() print(data) f.close()

.readable()语句 是否可读,当为写模式打开时,返回为False。

#有以Test1命名的以UTF-8编码储存在硬盘同一位置的txt文件 f = open("Test1", "r", encoding="utf8") print(f.readable()) f.close()

.readline()语句 一行一行读取数据

#有以Test1命名的以UTF-8编码储存在硬盘同一位置的txt文件 f = open("Test1", "r", encoding="utf8") data1 = f.readline() data2 = f.readline() print(data1, data2, sep="") f.close()

.readlines()语句 多行读取,返回的是一个列表

#有以Test1命名的以UTF-8编码储存在硬盘同一位置的txt文件 f = open("Test1", "r", encoding="utf8") print(f.readlines()) f.close()

只写模式 在只写模式下,只可以把内存中的数据以指定的编码方式写入硬盘。 只写操作在打开已存在的文件时会将该文件清空再操作,在打开不存在的文件时将会在指定位置创建一个文件并命名为,即创建新文件覆盖原文件。 所有写操作写入文件的都是字符串。 .write()语句 表示在光标位置写入内容。

#在同一目录下 f = open("Test2", "w", encoding="utf8") f.write("1111\n22222\n33333\n44444\n55555\n66666") f.close()

.writable()语句 是否可写,在只读模式下返回False。

#在同一目录下 f = open("Test2", "w", encoding="utf8") print(f.writable()) f.close()

.writelines()语句 传入的为一个列表

#在同一目录下 f = open("Test2", "w", encoding="utf8") f.writelines(["1111\n", "22222\n", "33333\n", "44444\n", "55555\n""66666"]) f.close()

只追加模式 文件追加会将所有追加的内容写在原文件内容的末尾。 如果追加的文件不存在会在指定位置创建一个指定名字的文件。 本质上就是一种写模式

#有以Test1命名的以UTF-8编码储存在硬盘同一位置的txt文件 f = open("Test1", "a", encoding="utf8") f.write("追加在文件末尾") f.close()

读写模式 在光标位置读取,也在标位置写入。 所以读写模式不会将文本整个覆盖掉,而只覆盖光标位置的文本。

#有以Test1命名的以UTF-8编码储存在硬盘同一位置的txt文件 f = open("Test1", "r+", encoding="utf8") f.read() f.write("经过.read()语句光标在末尾,所以此处插入在文件末尾位置") f.close()

如果不将光标移动到文件末尾后再写入文件,会覆盖掉原始文件的内容

#当前目录下有Test1文件且文件的第一行有内容 f = opwen("Test1", "r+", encoding= "utf8") f.write("Hello") f.close()

模拟内存读入数据后写至硬盘的操作 注意Pycharm查看文件时默认的打开编码是utf8编码,再打开gbk编码的文件时需要手动设置。

#将当前位置以utf8编码编写的Test1内容读入内存后以gbk编码写入当前目录下的Test3文件 src_f = open("Test1", "r", encoding = "utf8") data = src_f.read() src_f.close() dst_f = open("Test3", "w", encoding= "gbk") dst_f.write(data) dst_f.close()

在读出文件后对文件进行修改再写入另一个文件的情况: 利用 .readlines()语句 和 .writelines()语句 或者 .write() 语句配合。

#读取当前位置以utf8编码的文件Test1,将该文件的第一行写入当前目录下以gbk编码的文件Test4 sec_f = open("Test1", "r", encoding="utf8") data = sec_f.readlines() # 此处data为一个列表 sec_f.close() dst_f = open("Test4", "w", encoding="gbk") dst_f.write(data[0]) # 注意此处data虽然是列表形式但data[0]为字符串,所以采用 .write()语句 而不是 .writelines()语句。 dst_f.close()

with as 用法 以with关键字执行文件操作时不需要在末尾加入close语句。

#对当前目录下的以utf8编码的Test1文件执行操作 with open("Test1", "a", encoding="utf8") as f: f.write("\nwith关键字的测试")

以with关键字完成模拟内存读入数据后写至硬盘的操作:

#将当前位置以utf8编码编写的Test1内容读入内存后只将Test1内容的第二行以gbk编码写入当前目录下的Test4文件 with open("Test1", "r", encoding="utf8") as src_f, \ open("Test4", "w", encoding="gbk") as dst_f: data = src_f.readlines() dst_f.write(data[1])


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有