【自动化运维】Python 文件管理

发布于:2025-04-06 ⋅ 阅读:(15) ⋅ 点赞:(0)

Python 文件管理

一、文件操作

1.1、计算机文件

  • 在计算机系统中,以硬盘为载体存储在计算机上的信息集合成为文件。文件可以是文本文档、图片、声音、程序等多种类型。在编程时经常要对文件进行读写操作,从程序员的视角可以把文件理解为是连续的字节序列,进行数据传出需要使用字节流,字节流可以是由单个字节或大块数据组成。文件类型通常分为文本文件和二进制文件。
  • 对文件进行操作在Python中分为3个步骤,首先要打开文件,然后是对文件进行读写操作,最后需要关闭文件。

1.2、文件读写模块

打开模式 文件类型 方式 对已有文件影响 如果文件不存在 备注
r 文本 只读 抛异常 write等方法不可用
rb 二进制 只读 抛异常 write等方式不可用
r+ 文本 读写 追加 抛异常
rb+ 二进制 读写 追加 抛异常
w 文本 只写 覆盖并新建 新建 read等方法不可用
wb 二进制 只写 覆盖并新建 新建 read等方法不可用
w+ 文本 读写 覆盖并新建 新建 因为覆盖原来文件,read等方法获取到原文件的内容
wb+ 二进制 读写 覆盖并新建 新建 因为覆盖原来文件,read等方法获取到原文件的内容
a 文本 追加 追加到最后 新建 read等方法不可用
ab 二进制 追加 追加到最后 新建 read等方法不可用
a+ 文本 读写 追加到最后 新建
ab+ 二进制 读写 追加到最后 新建

1.3、文件的创建

1.3.1、使用 open 函数
  • Python内置了一个名为open的函数,它可以用于创建、打开和修改文件。
file = open("file01.txt", "w")
file.close()
  • 使用“file01.txt”作为文件名,并使用“w”作为访问模式。其中,“w”代表写入模式,它会创建一个新文件,并允许写入内容。
1.3.2、使用 with 关键字
  • 在使用open函数创建文件时,我们需要手动关闭文件,以确保资源得到释放。为了简化这个过程,Python提供了一个更好的方式,即使用with关键字,这样就不必执行关闭操作了。示例如下:
with open("file02.txt", "w") as file:
    # 在这里进行文件操作
    pass

1.4、读文件

  • 如果想要获取文件数据,可以使用带有读权限的方式打开文件。
  • 在系统中打开file01文件,在此文件中添加数据:
    • nihao01
    • nihao02
    • nihao03
1.4.1、open()方式的使用
  • 要想读取一个文件的内容,首先需要打开此文件,还是要用到open()函数,如以下语句:
file = open("file01.txt", "r") # r表示以读的方式进行文件读取操作,但文件要存在
file.close()
  • 备注:
    • 如果文件不存在,无法以”r“的方式读取文件,可以用”w+“的方式读文件,表示读写方式打开
1.4.2、read()方式读取文件内容
  • read()方式用于读取整个文件的内容,并将其存储为一个字符串。例如,要读取取名为”file01.txt“的文件的所有内容,可以使用以下代码:
file = open("file01.txt", "r")
content = file.read()
print(content)
file.close()
1.4.3、结合 with 语句读取文件内容
with open("file01.txt", "r") as file:
    content = file.read()
    print(content)
1.4.4、readlines()方法
  • readlines()方法用于读取整个文件的内容,并将其存储为一个列表,列表中的每个元素表示文件中的一行。例如,要读取名为“file01.txt”的文件的所有内容,可以使用以下代码:
  • 提前手动在要读取的文件中添加以下内容:
    • nihao01
    • nihao02
    • nihao03
file = open("file01.txt", "r")
lines = file.readlines()
for line in lines:
    print(line)
file.close()
  • 执行结果

    • nihao01

      nihao02

      nihao03

1.4.5、readline()方法
  • readline()方法用于读取文件的一行内容,并将其存储为一个字符串。每次调用readline()方法会读取文件中的下一行内容。例如,要读取名为“file01.txt”的文件的第一行内容,可以使用以下代码:
file = open("file01.txt", "r")
line = file.readline()
print("输出第一行")
print(line)

print("输出第二行")
line = file.readline()
print(line)
file.close()
  • 执行结果

    • 输出第一行
      nihao01

      输出第二行
      nihao02

1.5、写文件

1.5.1、写入文件时的不同模式
  • 覆盖模式(“w”):打开文件并将内容写入文件,如果文件存在,则覆盖原有内容。如果文件不存在则创建一个新的文件。
  • 追加模式(“-a”):打开文件并将内容写入文件,如果文件存在,则在文件末尾追加内容。如果文件不存在则创建一个新的文件。
  • 读写模式(“r+”):打开文件供读取和写入,如果文件存在,则覆盖原有内容。如果文件不存在,将抛出 FileNotFondError 异常。
1.5.2、写入字符串数
  • 写入字符串数据
with open("file.txt", "w") as file:
    file.write("nihao,zhangsan\n")
    file.write("nihao,lisi")
file.close()
1.5.3、写入字节数据
  • 使用 write() 方法将字节数据写入文件。
  • 可以使用 encode() 方法将字符串转换为字节数据进行写入。
  • 写入字节数据
with open("file.txt", "wb") as file:
    content = "Hello, World!\n"
    file.write(content.encode("utf-8"))
file.close()
1.5.4、wirtelines()
  • 该函数元素为列表,因此在使用该函数时,列表中的元素最后需要加入换行符"\n",否则得到的将是一整行结果,如下
file = open("file.txt", "w")
seq = ["111", "222", "333"]
file.writelines(seq)
file.close()
  • 文件内容:
    • 111222333
  • 如果需要让每个列表元素单独一行,需要加"\n":seq = [“111”, “222”, “333”]

1.6、重命名文件

  • 语法
    • os.rename(要重命名的文件/文件夹,新的文件/文件夹)
import os
os.rename("file.txt", "file01.txt")  # 目标文件不能存在否则报错

1.7、Python中的seek函数

  • 在Python中,文件操作是一项重要的任务。我们常常需要读取、写入或者修改文件的内容。在处理文件时,我们常常需要定位到文件的某个位置进行操作,这时就需要使用到sekk函数。

  • seek函数是Python的内建函数,它用于改变当前读写位置。函数的定义如下:

  • file.seek(offset, whence)

  • 其中:

    • file:指的是文件
    • offset:将光标向前移动 n 个位置
    • whence:光标远点,一般参数为0,1,2
      • 0-将开头作为光标原点
      • 1-将当前作为光标原点
      • 2-将末尾作为光标原点
1.7.1、准备一个文件
# 打开一个文件并指定文件路径
file_path = "file.txt"

# 使用 w 模式打开文件,以便写入数据
with open(file_path, "w", encoding="utf-8") as file:
    # 向文件写入示例数据
    file.write("这是第一行\n")
    file.write("这是第二行\n")
    file.write("这是第三行\n")
    file.write("这是第四行\n")
    file.write("这是第五行\n")
file.close()
1.7.2、seek函数应用举例
  • 示例1:读取文件前两个字
# 打开一个文件并指定文件路径
file_path = "file.txt"

# 1 读取前两个字符

with open(file_path, "r") as file:
    data = file.read(2)
print("读取前两个字符:", data)
file.close()
  • 执行结果:
    • 读取前两个字符: 这是
  • 示例2:使用 seek() 将文件指针移动到第 2 个汉字字符的位置(索引 2, 1个汉字占 2 个位置)
file_path = "file.txt"
with open(file_path, "r") as file:
    file.seek(2)
    data = file.read(3)
    print("再次读取三个字符:", data)
file.close()
  • 执行结果:

    • 再次读取三个字符: 是第一
  • 备注:

    • seek(2):向右移两个指针(一个汉字)
    • file.read(3):输出指针后的三个字符
  • 示例3:

# 3 使用 seek() 将文件指针移动到文件末尾
file_path = "file.txt"
with open(file_path, "r") as file:
    file.seek(0, 2)
    data = file.read()
    print("读取文件末尾:", data)
file.close()
  • 执行结果:

    • 读取文件末尾:
  • 备注:

    • file.seek(0, 2):将指针移动到文件末尾
    • file.read():读取指定后所有字符
  • 示例4:

# 4 使用 seek() 将文件指针移动到第二行开头(索引12)
file_path = "file.txt"
with open(file_path, "r") as file:
    file.seek(0, 0)
    file.seek(12)
    data = file.read()
    print("读取第二行及其后内容:", data)
file.close()
  • 执行结果:
    • 读取第二行及其后内容:这是第二行
    • 这是第三行
    • 这是第四行
    • 这是第五行
  • 备注:
    • file.seek(0, 0):将指针移动到文件起点
    • file.seek(12):将指针向右移动12个索引(每两个索引为一个函数)
    • data = file.read(): 读取指针后的所有字符

1.8、文件的删除

  • os 模块适用于删除单个文件或空目录;shutil 模块适用于删除单个文件或非空目录;而使用外部命令删除文件(os.system(),subprocess.call())则需要慎重考虑命令的风险和安全性。
1.8.1、使用 os.remove()方法删除文件
import os
os.remove("file.txt")
1.8.2、使用 os.unlink() 方法删除文件
import os
os.unlink("file.txt")

二、目录操作

2.1、获取程序运行路径

>>> import os
>>> os.getcwd()
'C:\\Users\\Lenovo'

2.2、列出当前文件夹下所有文件和文件夹

import os
os.listdir("d:\\")
for file in os.scandir():
    print(file.name, file.is_dir())

2.3、创建单层文件夹

import os
os.mkdir("mydir")

2.4、创建多层文件夹

import os
os.makedirs("我的文件夹")
os.mkdir("第一层文件夹/第二层文件夹/第三层文件夹")

2.5、命名文件夹

  • 语句
    • os.rename(要重命名的文件/文件夹, 新的文件/文件夹)
import os
os.rename("mydir","dir01")

2.6、删除文件夹

  • 语句:
    • shutil.rmtree(要删除的文件夹)
import shutil
shutil.rmtree("dir01")