python——文件操作

233 阅读7分钟

文件操作

作用:文件操作的作用就是将⼀些内容(数据)存储存放起来,可以让程序下⼀次执⾏的时候直接使⽤,⽽不必重新制作⼀份,省时省⼒ 。

⽂件操作包含:打开、关闭、读、写、复制......

绝对路径:是指在当前文件的电脑硬盘上真正存在的路径,也就是可以在文件目录里进行直接复制的路径
例:E:\python\python_basics\15.文件操作\笔记.py
相对路径:相对路径是指以当前的文件作为起点,相较于当前目录的位置而被指向并且加以引用的文件资源
例:./text.txt

注意(在python中,使用文件路径时注意\转义符)使用open时,注意文件编码一致,一般使用“utf-8"

打开文件

在python,使⽤open函数,可以打开⼀个已经存在的⽂件,或者创建⼀个新⽂件

语法:f = open(name,mode,encoding="编码")

name:是要打开的⽬标⽂件名的字符串(可以包含⽂件所在的具体路径)。

mode:设置打开⽂件的模式(访问模式):只读、写⼊、追加等。

模式(mode)描述
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

关闭文件

在python中,使用close()函数,用于关闭文件

语法:filename.close()


① r:以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。(若文件不存在不进行创建)

f = open("./text.txt", "r", encoding="utf-8")

#由于text.txt文件不存在报错

② w:打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。
如果该文件不存在,创建新文件。(覆盖写入)

f = open("./text.txt", "w", encoding="utf-8")   # 不存在则创建文件

③ a:打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。
      也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行
      写入。(追加写入)

f = open("./text.txt", "a", encoding="utf-8")  # 文件不存在则创建文件

# 注:w 和 a 模式:如果⽂件不存在则创建该⽂件;如果⽂件存在, w 模式先清空再写⼊, a 模式直接末尾追加。
# 写入文件

写入文件

使用write()函数,对已存在的文件进行写入操作

语法:write("内容")

① r:只用于读取,不支持写入文件
② w:可用于写入(覆盖写入)
 
 f = open("./text.txt", "w", encoding="utf-8")   # 打开文件

写入文件

f.write("枯藤老树昏鸦,\n小桥流水人家。")
f.write("古道西风瘦马,夕阳西下,断肠人在天涯。")  
# 覆盖写入,结果只显示“古道西风瘦马,夕阳西下,断肠人在天涯。”
f.close()   # 关闭文件

③ a:可用于写入文件(追加写入)
f = open("text.txt", "a", encoding="utf-8")
# f.write("枯藤老树昏鸦,小桥流水人家。")
f.write("古道西风瘦马,夕阳西下,断肠人在天涯。")   
# 追加写入结果显示“枯藤老树昏鸦,小桥流水人家。古道西风瘦马,夕阳西下,断肠人在天涯。
f.close()

读取文件

①、使用read()函数,对文件内容进行读取
语法:read(num),num表示要从⽂件中读取的数据的⻓度

f = open("text.txt", "r", encoding="utf-8")
content = f.read()
print(content)
#>>>枯藤老树昏鸦,小桥流水人家。
   古道西风瘦马,夕阳西下,断肠人在天涯。
f.close()

f = open("text.txt", "r", encoding="utf-8")
content = f.read(5)
print(content)
# >>>枯藤老树昏
f.close()

# 当文本文件很大时可以使用read(num)方法,节省空间。
f = open("text.txt", "r", encoding="utf-8")
while True:
   content = f.read(5)
   print(content)
   if len(content) == 0:
       break
② readline():只读去一行
f = open("text.txt", "r", encoding="utf-8")
content = f.readline()
print(content)
# >>>枯藤老树昏鸦,小桥流水人家。(只读取了第一行)
f.close()

③ readlines():读取文件中的每一行,并将每一行作为一个元素,存储到列表中。
f = open("text.txt", "r", encoding="utf-8")
content = f.readlines()
print(content)
# >>>['枯藤老树昏鸦,小桥流水人家。\n', '古道西风瘦马,夕阳西下,断肠人在天涯。']
f.close()
seek():⽤来移动⽂件指针

语法:⽂件对象.seek(偏移量, 起始位置)

偏移量,即字节数,一个英文单词占一个字节。在“utf-8”编码中,一个中文汉字占3个字节。 在“gbk”编码中,一个中文汉字占2个字节。

f = open("text.txt", "r", encoding="utf-8")
f.seek(3)
content = f.read()
print(content)
# >>>藤老树昏鸦,小桥流水人家。
# 古道西风瘦马,夕阳西下,断肠人在天涯。(没有了“枯”字)
f.close()

上写文管理器:可自动关闭文件,不用写close()

语法:with ....as......

# 例
with open("text.txt", "r", encoding="utf-8") as f:
    content = f.readlines()
    print(content)

with open("text.txt", "w", encoding="utf-8") as f:
    f.write("床前明月光,疑是地上霜。")


with open("text.txt", "a", encoding="utf-8") as f:
    f.write("\n举头望明月,低头思故乡。")

文件备份

需求:⽤户输⼊当前⽬录下任意⽂件名,程序完成对该⽂件的备份功能(备份⽂件名为xx[备份]后缀,例如:demo[备份].txt)

  1. 接收⽤户输⼊的⽂件名

  2. 规划备份⽂件名

  3. 备份⽂件写⼊数据

①:**接收⽤户输⼊⽬标⽂件名**
# 方法一、split()切片

filename = input("请输入文件名:")
name_list = filename.split(".")
new_name = name_list[0]+"备份."+name_list[1]
# print(new_name)

# 方法二.index()和find()查找“.”索引
index = filename.index(".")  # 或者find()
# print(index)
new_name = filename[:index]+"备份"+filename[index:]
# print(new_name)

②:备份⽂件写⼊数据
# 1、打开源⽂件 和 备份⽂件
# 2、将源⽂件数据写⼊备份⽂件
# 3、关闭⽂件
old_file = open(filename, "r", encoding="utf-8")
new_file = open(new_name, "w", encoding="utf-8")
#方法一:
while True:
    cont = old_file.read(5)
    if len(cont) == 0:
        break
    new_file.write(cont)
# 方法二:
content = old_file.read()
new_file.write(content)

old_file.close()
new_file.close()

文件和文件夹操作

在python中对文件和文件夹的操作可借用os模块里的相关功能

# 引入OS模块
import os

# 文件重命名 os.rename(目标文件名,新文件名)
# 
# os.rename("学员信息.txt", "学员信息表.txt")

# 删除文件 os.remove(文件名)
# os.remove("test")

# 创建文件夹 os.mkdir()
# os.mkdir("./test")

# 删除文件夹 os.rmdir()
# os.rmdir("test")

# 获取当前目录 os.getcwd()
# address = os.getcwd()
# print(address)

# 改变默认目录 os.chdir()
# os.chdir()

# 获取目录列表 os.listdir()
# a = os.listdir("E:\python学习\python_basics\15.文件操作")
# print(a)