Python学习笔记(十七)文件操作

Python学习笔记(十七)文件操作

一、文件操作的概念和作用

思考:文件操作包含什么?

答:打开、关闭、读、写、复制...

思考:文件操作的作用是什么?

答:读取内容、写入内容、备份内容...

总结:

二、文件的基本操作

2.1 文件操作步骤
  1. 打开文件
  2. 读写等操作
  3. 关闭文件
注意:可以只打开和关闭文件,而不进行任何读写操作。
2.1.1 打开

在这里插入图片描述

2.1.2 文件对象方法

2.1.2.1 写

f.write('写入内容')

2.1.2.2 读

  • read()
文件对象.read(num)

在这里插入图片描述

f = open('1.txt','r')

# 文件内容如果换行,底层有\n,会有字节占位,导致read书写参数读取出来眼睛看到的个数与参数值不匹配
# read() 不写参数,表示读取所有
print(f.read(10))
f.close()

在这里插入图片描述

  • readlines()
    在这里插入图片描述
f = open('test.txt','r')

print(f.readlines())
f.close()

在这里插入图片描述

  • readline()
    readline() 是一次读取一行内容。
f = open('test.txt','r')

print(f.readline())  #第1次调用readline则读取文件第1行内容
print(f.readline())  #第2次调用readline则读取文件第2行内容
print(f.readline())  #第3次调用readline则读取文件第3行内容
print(f.readline())  #第4次调用readline则读取文件第4行内容
print(f.readline())  #第5次调用readline则读取文件第5行内容

f.close()

在这里插入图片描述
2.1.2.3 seek()

作用:用来移动文件指针

语法如下:

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

起始位置:

  • 0:文件开头
  • 1:当前位置
  • 2:文件结尾
'''
语法: seek(目标偏移量,起始位置) 起始位置: 0 -- 开头, 1 -- 当前位置, 2 -- 结尾
目标:
   1. r 改变文件指针位置:改变读取数据开始位置或把文件指针位置放结尾(无法读取数据)
   2. a 改变文件指针位置,做到可以读取数据
'''

# 1. r+ :
f = open('test.txt','r+')
print(f.read())  # 读取的是目标文件所有

f.seek(2,0)   # 表示向右偏移2个字节,起始位置为开头
print(f.read())  # 从目标文件第三个数据开始读取

f.seek(0,2)  # 表示不偏移,起始位置为结尾
print(f.read())  # 从文件结尾读取,所以读取不出来数据

f.close()

# 2. a+ :
f = open('test.txt','a+')
print(f.read())  #文件指针在结尾读取不出来数据

f.seek(0,0)  # 表示不偏移,起始位置为开头
print(f.read())  # 从文件开头开始读取

f.close()

在这里插入图片描述

2.1.3 关闭
文件对象名.close()

例子:

# 1. 打开 open()
f = open('test.txt','w')

# 2. 读写 write() read()
f.write('aa')

# 3. 关闭 close()
f.close()
2.2 文件操作访问模式

在这里插入图片描述

注意:

  1. 带‘b’的是以二进制的形式;
  2. 带‘+’的是可读可写。
'''
测试目标:
4. 访问模式对文件的影响
5. 访问模式对write()的影响
6. 访问模式是否可以省略
'''

# r: 如果文件不存在,会报错: 不支持写入操作,表示只读
f = open('test.txt','r')
f.write('aa')  # 会报错
f.close()

# w :只写: 如果文件不存在,新建文件:如果执行写入,会覆盖原有内容
f = open('1.txt','w')
f.write('aaaaa')  # 会覆盖原有内容
f.close()

# a : 追加: 如果文件不存在,新建文件:如果执行写入,在原有内容基础上追加新内容
f = open('2.txt','a')
f.write('abb')  # 会在原有内容基础上加新的内容
f. close()

# 访问模式是否可以省略, 如果省略表示访问模式为r
f = open('1.txt')
f.close()
'''
测试目标:
1. r+ / w+ / a+ / 区别:
2. 文件指针对数据读取的影响
'''

# r+: 没有该文件则报错; 文件指针在开头,所以能读取来数据
# f = open('test1.txt','r+')  # 报错,因为没有
f = open('test.txt','r+')
print(f.read())
f.close()

# w+: 没有该文件新建文件; 文件指针在开头,用新内容覆盖原内容
f = open('test1.txt','w+')
print(f.read())
f.close()

# a+: 没有该文件新建文件;文件指针在结尾,无法读取数据(文件指针后面没有数据)
f = open('test.txt','a+')
print(f.read())

在这里插入图片描述
注意:此截图结果只是以 r+ 形式打开文件读的结果。

三、文件备份

在这里插入图片描述

3.1 步骤

在这里插入图片描述

3.2 代码实现

注意:
在这里插入图片描述

# 1. 用户 输入 目标文件
old_name = input('请输入要备份的文件名:')

# 2. 规划备份文件的名字
 # 2.1 提取目标文件后缀 -- 找到名字中的'.' -- 名字和后缀分离 -- 最右侧的'.'才是后缀的‘.’-- 字符串查找某个子串rfind()
index = old_name.rfind('.')  # 提取后缀’.'的下标

 # 2.2 组织备份的文件名 = 原名字+ [备份] + 后缀
 # 原名字就是字符串当中的一部分 -- 字符串切片即可 -- 切片[开始:结束:步长]
if (index > 0):
    print('原文件名字为:',old_name[:index])  # 提取原名字
    print('原文件名字的后缀为',old_name[index:])  # 提取后缀
    new_name = old_name[:index] + '[备份]' + old_name[index:]
    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:
        break
    new_f.write(con)
 # 3.3 关闭文件
old_f.close()
new_f.close()

在这里插入图片描述

四、 文件和文件夹的操作

在python中文件和文件夹的操作要借助os模块里面的相关功能,具体步骤如下:

  1. 导入os模块
import os
  1. 使用os模块相关功能
os.函数名()
4.1 rename(): 重命名
os.rename('旧文件名','新文件名')

注意:rename()还可用于重命名文件名

# rename(): 也可用于重命名文件夹 -- 将文件夹 aa 重命名为 aaaa
os.rename('aa','aaaa')
4.2 remove(): 删除
os.remove('文件名'
'''
4. 导入模块os
5. 使用模块内功能
'''
import os
# 1. rename(): 重命名
os.rename('2.txt','20.txt')  # 执行操作后,文件被重命名

# 2. remove(): 删除文件
os.remove('20.txt')  # 执行操作后,文件被删除
4.3 创建文件夹
os.mkdir(文件夹名字)
4.4 删除文件夹
os.rmdir(文件夹名字)
4.5 获取当前目录路径
os.getcwd()  # C:\Users\YSH\Desktop\test
4.6 改变默认目录
os.chdir(文件夹名字)

例1:

# 5. chdir(): 改变目录路径
os.mkdir('aa')
# 需求:在aa文件夹里面创建bb文件夹: 1.切换目录到aa 2.创建bb
os.chdir('aa')
os.mkdir('bb')

在这里插入图片描述
例2:

# 快速在一个大文件夹下简历几个小文件
import os
os.chdir('aaaa')
os.mkdir('cc')
os.mkdir('dd')
os.mkdir('ee')
os.mkdir('ff')
os.mkdir('gg')
os.mkdir('hh')
os.mkdir('ii')

在这里插入图片描述

4.7 获取目录列表
os.listdir(文件夹名字)
# listdir(): 获取某个文件夹下所有文件名,返回一个列表
print(os.listdir('aa'))  #['bb']

五、应用案例

在这里插入图片描述
在这里插入图片描述
添加重命名:

# 需求1:把test文件夹所有文件由 xxxx 重命名为 Python_xxxx
import os
# 1. 找到所有文件:读取aaaa文件夹的目录列表 -- listdir()
file_list = os.listdir()
print(file_list)

# 2. 构造名字
for i in file_list:
    # new_name = 'Python' + 原文件名
    new_name = 'Python_' + i

# 3. 重命名
    os.rename(i,new_name)

删除重命名:

# 需求2:把test文件夹所有文件由 Python_xxxx 重命名为 xxxx
import os
# 1. 找到所有文件:读取aaaa文件夹的目录列表 -- listdir()
file_list = os.listdir()
print(file_list)

# 2. 构造新名字
for i in file_list:
    num = len('Python_')
    new_name = i[num:]

# 3. 重命名
    os.rename(i,new_name)

在这里插入图片描述

六、总结

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值