Fork me on github

Python学习笔记之文件操作

文件操作

1.1 文件操作的作用

  • 文件读写
  • 文件备份
  • 把一些内容存放起来,可以让程序下一次执行的时候直接使用,而不用重新制作一份,省时省力。

1.2 文件的基本操作

1.2.1 文件简单操作体验

# 打开文件
# 第一个参数是文件路径,第二个参数是访问模式
f = open("a.txt", "w")
# 文件操作
f.write("hello")
# 关闭文件
f.close()

1.2.2 访问模式

模 式说明
r(以读的方式)如果文件不存在,就会报错。而且不能够往文件中写文件,默认的访问方式,文件指针开头
w(以写的方式来)如果文件不存在,创建文件。
a(以追加的方式)如果文件不存在,创建文件。文件指针在文件的结尾的

在主访问模式的带+,带b的区别。

  • + 的表示二进制

  • 带 b 的表示可读可写

  • 文件指针对数据的影响

  • r+ 与 w+ 与 a+ 的区别

# 1. r+ 可读可写(带+号)
# 2. 依赖r的特点,如果没有文件,会报错
# FileNotFoundError: [Errno 2] No such file or directory: 'a.txt'
# 3. 根据文件的指针,文件指针指向开头
f = open("a.txt", "r+")
f.close()

# 1. w+可读可写(带+号)
# 2. 依赖w(主访问模式)的特点,如果没有文件,会新建文件
# 3. 根据文件的指针,文件指针指向开头
# 4. 文件指向开头,用新内容覆盖旧内容
f = open("a.txt", "w+")
f.close()

# 1. a+可读可写(带+号)
# 2. 依赖a(主访问模式)的特点,如果没有文件,会新建文件
# 3. 根据文件指针的影响,文件指针指向末尾
# 4. 但是无法打印读取到的数据(因为指针指向末尾,他会向右读数据,而右边的数据是空的)
f = open("a.txt", "a+")
res = f.read()
print(res)
f.close()

比喻:找一本指定标题笔记本,如果想看的话,没有找到,就会发狂很难受,如果写笔记的的话,可以随便的找一张纸来写,打开这个笔记本(打开文件),看里面的内容(r),写笔记(w、a),关闭笔记,将笔记返回原来的位置(关闭文件)

1.2.3 文件读取

  • read()
  • readlines()
  • readline()

read

f = open("a.txt", "r")

# 不写参数,表示读取所有的
# print(f.read())

# 带参数, 读取10个字符
# 文件如果有换行,底层有个\n,占用了一个字符
print(f.read(10))

f.close()

readlines

f = open("a.txt", "r")
# 文件对象.readlines()
# 以行为单位,读取文件,返回一个列表
con = f.readlines()
print(con)
# ['hello\n', 'world\n', 'java\n', 'hihi']
f.close()

readline

f = open("a.txt", "r")
# 一次读取一行
res1 = f.readline()
print(res1)
res2 = f.readline()
print(res2)
f.close()

1.2.4 文件操作seek函数

seek的作用:就是用来移动指针的。

文件对象.seek(偏移量, 起始位置)

起始位置:

  • 0:文件开头
  • 1: 当前位置
  • 2: 文件结尾
# r 学习目标:
f = open("a.txt", "r+")
# 1. 改变指针文件位置(读取部分数据)
f.seek(2, 0)
# 2. 将指针位置放在末尾(让他读不出来数据)
f.seek(0, 2)
res = f.read()
print(res)
f.close()

# a 学习目标
f = open("a.txt", "a+")
# 1. 改变指针文件位置,做到可以读取数据
f.seek(2, 0)
res = f.read()
print(res)
f.close()

1.3 文件备份

需求:用户输入当前文件的文件名,程序对该文件名进行备份

(备份文件名为:xx[备份].后缀)

1.3.1 文件备份步骤

  • 接收用户的输入的文件名
  • 规范备份文件名
  • 备份文件写入数据
old_name = input("请输入当前目录的文件名:")

# 获取用户输入的信息
# print(old_name)

# 获取 最后一个以.结尾的索引
index = old_name.rfind(".")
# 获得前缀
qianzui = old_name[:index]
# 获得后缀
houzui = old_name[index:]

# 通过拼接修改备份的文件名
new_name = qianzui + "【备份】" + houzui
# print(new_name)

# 操作原来的文件 和 备份的文件
old_f = open(old_name, "rb")
new_f = open(new_name, "wb")

# 将读到的文件写入到备份的文件
while True:
    con = old_f.read(1024)
    if len(con) == 0:
        break
    new_f.write(con)
    pass
print("备份文件成功")

1.3.2 文件备份的好处

对文件内容进行保护

1.4 文件和文件夹的操作

文件操作

  • 导入os模块 import os
  • 文件重命名 os.rename(old_dir_name, new_dir_name)
  • 文件删除 os.remove(dir)

文件夹操作

  • 创建文件夹os.mkdir(文件夹名字)
  • 删除文件夹os.rmdir(文件夹名字)
  • 获取当前文件所在文件目录os.getcwd()
  • 改变默认目录os.chdir(目录)
  • 获取目录列表os.listdir()
  • 文件夹重命名 os.rename(old_dir_name, new_dir_name)

1.5 应用案例

需求:把xx文件夹下的所有文件重命名为python_xx(添加字符串)

​ 把xx文件夹下面的python_xx文件重命名为xx文件(删除字符串)

import os
# 做一个flag = 1,添加指定字符串的文件名, flag = 2, 删除指定字符串的文件名
flag = 2
# 获得当前目录下的所有文件
list_file = os.listdir()
for item in list_file:
    if flag == 1:
        new_name = "python_" + item
    if flag == 2:
        index = len("python_")
        new_name = item[index:]
    os.rename(item, new_name)
posted @ 2022-01-23 11:59  不想努力的小龙  阅读(35)  评论(0编辑  收藏  举报