失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Python文件(一):文件类型 文件的打开 读取写入 关闭 文件备份 文件和文件夹的操作

Python文件(一):文件类型 文件的打开 读取写入 关闭 文件备份 文件和文件夹的操作

时间:2022-09-11 20:54:13

相关推荐

Python文件(一):文件类型 文件的打开 读取写入 关闭 文件备份 文件和文件夹的操作

一、文件

文件是存储在存储器上的一组数据序列,可以包含任何数据内容。

文件是数据的抽象和集合。

二、文件类型

文本文件:长字符串

二进制是信息按照非字符但有特定格式形成的文件,文件内部数据的组织格式与文件用途有关

二进制文件和文本文件区别:

1、最主要的区别在于是否有统一的字符编码,二进制文件由于没有统一的字符编码,只能当做字节流,不能看作字符串。

2、无论文件创建为文本文件或者二进制文件,都可以用“文本文件方式”和“二进制文件方式”打开,但打开后的操作不同。

采用文本文件方式读入文件,文件经过编码形成字符串,打印出有含义的字符。

采用二进制方式打开文件,文件被解析为字节流。由于存在编码,字符串中的一个字符由多个字节表示。

f = open("C:\\Users\\520\\Desktop\\a.txt", "tr", encoding="utf-8")print(f.readline())f.close()输出:送你一朵小红花。例2:Traceback (most recent call last):File "C:/Users/520/PycharmProjects/pythonProject1/guessnum.py", line 1, in <module>f = open("C:\\Users\\520\\Desktop\\a.txt", "br", encoding="utf-8")ValueError: binary mode doesn't take an encoding argumentf = open("C:\\Users\\520\\Desktop\\a.txt", "br")print(f.readline())f.close()输出:b'\xe9\x80\x81\xe4\xbd\xa0\xe4\xb8\x80\xe6\x9c\xb5\xe5\xb0\x8f\xe7\xba\xa2\xe8\x8a\xb1\xe3\x80\x82'

三、文件的打开和关闭

Python对文本文件和二进制文件采用统一的操作步骤,即“打开-操作-关闭”。操作系统中的文件默认处于存储状态,首先需要将其打开,使得当前程序有权操作这个文件。打开后的文件处于占用状态,此时,另一个进程不能操作这个文件。可以通过一组方法读取文件的内容或向文件写入内容,操作之后需要将文件关闭,关闭将释放对文件的控制使文件恢复成存储状态,此时,另一个进程将能够操作这个文件。

Python通过open()函数打开一个文件,并返回一个操作这个文件的变量,语法:

文件对象 = open(“文件路径及文件名及扩展名”, “打开模式”)

注意:文件路径及名称及扩展名,"“是转义符和续行符,所以改为”\“或”/"

open()返回的即是文件对象

r为读模式, w, x, a为写模式,t, b为打开模式,可以使用"+"组合使用,形成既表达读写又表达文件模式的方式

r:read,w:wipe,x:exist,a:append,t:text,b:binary

变量名=open(文件名,“r”)

以文本方式打开一个文件,只读模式,读入后不能对文件进行修改

变量名=open(文件名,“r+”)

以文本方式可读写地打开一个文件,可以读入并修改文件

变量名=open(文件名,“a”)

以文本追加写方式打开一个文件,不能读信息

变量名=open(文件名,“a+”)

以文本追加写方式打开一个文件,可以读文件

当文件关闭后,再对文件进行读写将产生I/0操作错误。

四、文件的读取

如果文件以文本文件方式打开,则读入字符串;如果文件以二进制方式打开,则读入字节流。

f.read(),一次性读入整个文件所有内容,返回一个字符串

f.readline(),一次读取一行,返回一个字符串,调用多次读多行

f.readlines(),一次性读入整个文件所有内容,返回一个列表,列表的每个元素是字符串,是文件的每一行

对于大文件,一次性地读入会耗费非常多的时间和资源

f = open("C:\\Users\\520\\Desktop\\a.txt", "rt")print(f.read(2))f.close()输出:新年f = open("C:\\Users\\520\\Desktop\\a.txt","rt")print(f.read())print(type(f.read()))f.close输出:新年都未见芳华,二月初惊见草芽。白雪却嫌春色晚,故穿庭树作飞花。<class 'str'>f = open("C:\\Users\\520\\Desktop\\a.txt","rt")print(f.readline())print(type(f.readline()))f.close输出:新年都未见芳华,二月初惊见草芽。<class 'str'>f = open("C:\\Users\\520\\Desktop\\a.txt","rt")print(f.readlines())print(type(f.readlines()))print(f.readlines())f.close输出:['新年都未见芳华,二月初惊见草芽。\n', '白雪却嫌春色晚,故穿庭树作飞花。']<class 'list'>[] #此时读取指针在文件末尾,再次调用f.readlines()已无法从当前读取指针处读入内容f = open("C:\\Users\\520\\Desktop\\a.txt", "rt")print(f.readlines())f.seek(0) # 将指针重置到文件开头print(f.readlines())f.close输出:['新年都未见芳华,二月初惊见草芽。\n', '白雪却嫌春色晚,故穿庭树作飞花。']['新年都未见芳华,二月初惊见草芽。\n', '白雪却嫌春色晚,故穿庭树作飞花。']

遍历全文本一:一次读入,统一处理

遍历全文本二:按数量读入,逐步处理。分批分阶段,对处理大文件更加可行和有效

逐行遍历文件一:一次读入,逐行处理

逐行遍历文件二:分行读入,逐行处理

for line in f,读入的是文件的每一行,是一个字符串,含换行符

f = open("C:\\Users\\520\\Desktop\\a.txt", "rt")for line in f.readlines(): #逐行遍历文件:一次读入,分行处理print(line)f.close()输出:(两行文字输出之间有两个空行,是因为原文第一行后有一个换行符"\n",print()默认一个换行,共两个空行)新年都未见芳华,二月初惊见草芽。白雪却嫌春色晚,故穿庭树作飞花。f = open("C:\\Users\\520\\Desktop\\a.txt", "rt")for line in f: #逐行遍历文件:分行读入,逐行处理print(line)f.close()输出:新年都未见芳华,二月初惊见草芽。白雪却嫌春色晚,故穿庭树作飞花。

f = open("C:\\Users\\520\\Desktop\\a.txt", "rt", encoding="utf-8")for line in f:print(line.replace("\n", "")) #使用replace()去掉读入的换行符输出:新年都未见芳华,二月初惊见草芽。白雪却嫌春色晚,故穿庭树作飞花。print(line.strip("\n")) #也可以用strip()去掉读入的换行符

注:逐行遍历文件仅针对文本方式,以二进制方式打开没有行的概念。

.

五、文件的写入

- f.wite(),向文件写入字符串或字节流,每次写入后,将会记录一个指针

- f.writelines(),向文件写入一个列表,每次写入后,将会记录一个指针

- 使用f.write(s)和f.writelines()时,都要显式地使用"\n"对写入文本进行分行,如果不进行分行,每次写入的字符串会被连接起来,中间没有空格或其它符号

例1、f.write()未使用换行符进行分行

f = open("C:\\Users\\520\\Desktop\\a.txt", "w")f.write("新年都未有芳华")f.write("二月初惊见草芽")f.write("白雪却嫌春色晚")f.write("故穿庭树作飞花")f.close()

例2、f.write()显式地使用换行符"\n"进行分行

f = open("C:\\Users\\520\\Desktop\\a.txt", "w")f.write("新年都未有芳华\n")f.write("二月初惊见草芽\n")f.write("白雪却嫌春色晚\n")f.write("故穿庭树作飞花\n")f.close()

例3、f.seek(),指针未重置

ls = ["韩愈(唐)\n", "新年都未有芳华", "二月初惊见草芽", "白雪却嫌春色晚", "故穿庭树作飞花"]f = open("C:\\Users\\520\\Desktop\\a.txt", "w+")f.writelines(ls)for line in f:print(line)控制台输出:无输出

例4、f.seek(),读写之后重置指针

ls = ["韩愈(唐)\n", "新年都未有芳华", "二月初惊见草芽", "白雪却嫌春色晚", "故穿庭树作飞花"]f = open("C:\\Users\\520\\Desktop\\a.txt", "w+")f.writelines(ls) #写入文件之后,指针位于文件结尾处f.seek(0)for line in f:print(line)输出:韩愈(唐)新年都未有芳华二月初惊见草芽白雪却嫌春色晚故穿庭树作飞花

t.txt内容:abcdefgf = open("t.txt", "r+")f.seek(2, 0)con = f.read()print(con)f.close() 输出:cdefg

六、文件备份

需求:用户输入当前目录下任意文件名,程序完成对该文件的备份功能,备份文件格式为XXX[备份],例如:test[备份].txt。

# 1.接收用户输入的目标文件old_name = input("请输入要备份的文件名:")# print(old_name)# 2.规划备份文件的名字# 2.1 提取扩展名 -- 找到名字中的点 -- 名字和扩展名分离# 2.2 最右侧的点才是扩展名--字符串查找某个子串index = old_name.rfind(".")# print(index)# 2.3 组织新名字,原名+[备份]+扩展名# 有效文件才备份if index > 0:postfix = old_name[index:]new_name = old_name[:index] + '[备份]' + postfix# print(new_name)# 3.备份文件写入数据# 3.1打开源文件和备份文件old_f = open(old_name, "rb")new_f = open(new_name, "wb")# 3.2源文件读取,备份文件写入# 如果不确定目标文件大小,循环读取写入,当读取出来的数据没有了停止循环while True:con = old_f.read(1024)if len(con) == 0:breaknew_f.write(con)# 3.3关闭两个文件old_f.close()new_f.close()

七、文件的操作

在Python中⽂文件和⽂文件夹的操作要借助os模块⾥里里⾯面的相关功能,步骤:

导入OS模块,import os使用OS模块相关功能,os.函数名()

1、文件重命名

os.rename(目标文件名, 新文件名)

2、删除文件

os.remove(目标文件名)

import os# os.rename("t.txt", "t2.txt")os.remove("t2.txt")

八、文件夹的操作

1、创建文件夹

import osos.mkdir("aa")print(os.path)

如果文件夹已存在,报错:

2、删除文件夹

import osos.rmdir("aa")

3、获取当前文件所在目录

import osprint(os.getcwd())

4、改变默认目录

import osos.mkdir("C:\\Users\\520\\Desktop\\aa")os.chdir("C:\\Users\\520\\Desktop\\aa")os.mkdir("bb") # 在aa文件夹下创建bb文件夹 C:\Users\520\Desktop\aa\bb

5、获取目录列表,返回一个列表list,元素为各个文件名字符串(不含路径)

import osprint(os.listdir()) # 返回当前代码文件夹下的所有文件

import osprint(os.listdir("C:\\Users\\520\\Desktop"))

6、重命名文件夹,rename既可以重命名文件,也可以重命名文件夹

import os# os.mkdir("aa")os.rename("aa","aaaa")

九、应用案例

需求:批量量修改⽂件名,既可添加指定字符串,⼜能删除指定字符串

# 添加指定字符串,构造新名字# 1,找到所有文件# 1,1找到所有文件:获取文件夹目录列表 -- listdir()import osos.chdir("C:\\Users\\520\\Desktop\\aa")file_list = os.listdir()# 2,构造名字for i in file_list:new_name = "new_" + i# 3,重命名os.rename(i, new_name)

优化:

# 添加指定字符串,构造新名字;删除指定字符串,构造新名字# 1,找到所有文件# 1,1找到所有文件:获取文件夹目录列表 -- listdir()import osdir_name = "C:\\Users\\520\\Desktop\\aa"# os.chdir("C:\\Users\\520\\Desktop\\aa")file_list = os.listdir(dir_name)print(file_list)# 设置重命名标识:如果为1则添加指定字符,flag取值为2则删除指定字符flag = 1# 2,构造名字for i in file_list:if flag == 1:new_name = "new_" + i# 删除指定字符elif flag == 2:num = len("new_")new_name = i[num:]# 打印新⽂文件名,测试程序正确性print(new_name)# 3,重命名os.rename(dir_name + "\\" + i, dir_name + "\\" + new_name)

十、文件小结

w,文件指针在开头,会覆盖原内容r,文件指针在开头,向下可以读入数据a,文件指针在结尾,向下读不出数据,通过seek(偏移量,位置)改变指针位置

十一、小结

PS: source, python123

如果觉得《Python文件(一):文件类型 文件的打开 读取写入 关闭 文件备份 文件和文件夹的操作》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。