本文已参与「新人创作礼」活动,一起开启掘金创作之路。
文件操作
-
文件操作的作用
-
文件的基本操作
打开
读写
关闭
-
文件备份
-
文件和文件夹操作
文件操作的作用
什么是文件???
文件是计算机文件属于文件的一种,文件可以是文本文档、图片、程序等等。
文件操作包含什么??
包含:打开,关闭,读,写,复制,粘贴,剪切,等等
文件操作的作用是什么??
读写内容,写入内容,备份内容
总结:文件操作的作用就是,把一些内容(数据)存储存放起来,可以让程序下一次执行的时候直接使用,而不需要重新制作一份,省时省力
文件的基本操作
- 打开文件
- 读写等操作文件
- 关闭文件
注意:可以只打开文件和关闭文件,不进行任何读写操作
打开
在python,使用open 函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下:
open(name,mode)
name:是打开的目标文件名称的字符串(可以包含文件所在的具体路径)
mode:设置打开文件的模式(访问模式):只读,写入,追加等。
python打开文件的模式
r | 只读模式 | 如果文件不存在 | 返回异常FileNotFoundError,默认值 |
---|---|---|---|
w | 覆盖模式 | 文件不存在则会创建文件 | 该文件存在则会完全覆盖掉 |
x | 创建写模式 | 文件不存在则创建文件 | 存在则返回异常FileExistError |
a | 追加写模式 | 文件不存在则创建文件 | 存在则在文件最后追加内容 |
b | 二进制文件模式 | ||
t | 文本文件模式 | 默认值 | |
+ | 与r/w/x/a 一同使用, | 在原功能的基础上增加同事读写的功能 |
体验模式
写
文件对象.write('内容')
#打开文件
f=open('test.txt','w')
#文件写入
f.write('hello-word')
#关闭文件
f.close()
w是这个只读模式
close()是关闭文件的意思
注意:此时f才是open打开的文件对象,意思就是通过读取test.txt里面的内容f,然后我们打开f,将内容呈现出来
读
文件对象.read(num)
num表示要从文件中读取的数据的长度(单位是字节)如果没有传入num,那么就表示读取文件所有的数据
#打开文件 r只读模式
f=open('test.txt','r')
#读文件 read(不写参数表示读取所有)
print(f.read())
#关闭文件
f.close()
当我们test.txt文件内容是这样的
111111
222222
read()空参数的情况是读全部
输出全部就是
111111
222222
当有参数
read(12)
就是输出12给字符串等等
输出结果就是
111111
22222
不应该是6个1,6个2吗,为什么少了一个2
这里说明一下,当文件中有换行的时候,计算机会执行一个换行符(换行符\n),虽然看不见这个换行符,但是他是存在的,111111当1换行的时候就占用了一个字节位,所有输出的时候会少一个
有换行符的是怎么样的呢
111111\n
222222
readline()
readline()一次读取一行内容
#打开文件 r只读模式
f=open('test.txt','r')
#读文件
#第一次readline()读取第一行内容
content=f.readline()
print(f'第一行内容:{content}')
#第二次readline()读取第二行内容
content=f.readline()
print(f'第二行内容:{content}')
#关闭文件
f.close()
操作
seek()
作用:用来移动文件指针
语法如下
文件对象.seek(偏移量,起始位置)
起始位置:
0:文件开头
1:当前位置
2:文件结尾
文件备份
常见的文件备份操作就,就是复制原来的一份文件再粘贴出来,这就是最简单的文件备份的一个操作
步骤
- 接收用户输入的文件名
- 规划备份文件名
- 备份文件写入数据
代码实现
- 接收用户输入目标文件名
old_name=input('请输入你要备份的文件名:')
-
规划备份文件
提取目标文件后缀
组织备份的文件名,xx[备份]后缀
old_name=input('请输入你要备份的文件名:')
#提取文件后缀的下标
#当我们输入1.txt,rfind获取的下标就是1
#他获取的是点前面的字符个数
index=old_name.rfind('.')
#切片
#我们上面获取的是字符的个数而表示可视化的字母文字
#我们现在要输出字母获取文字
#index是获取点前面的文件名称字符个数,我们就直接输出他前面的字母名称
print(old_name[:index])
#提取点后面的后缀格式
print(old_name[index:])
- 备份流程
old_name=input('请输入你要备份的文件名:')
#提取文件后缀的下标
#当我们输入1.txt,rfind获取的下标就是1
#他获取的是点前面的字符个数
index=old_name.rfind('.')
#切片
#我们上面获取的是字符的个数而表示可视化的字母文字
#我们现在要输出字母获取文字
#index是获取点前面的文件名称字符个数,我们就直接输出他前面的字母名称
##print(old_name[:index])
#提取点后面的后缀格式
##print(old_name[index:])
new_name=old_name[:index] + '[备份]' + old_name[index:]
print(new_name)
- 备份文件写入数据
打开原文件和备份文件
将原文件数据写入到备份文件
关闭文件
old_name=input('请输入你要备份的文件名:')
#提取文件后缀的下标
#当我们输入1.txt,rfind获取的下标就是1
#他获取的是点前面的字符个数
index=old_name.rfind('.')
#切片
#我们上面获取的是字符的个数而表示可视化的字母文字
#我们现在要输出字母获取文字
#index是获取点前面的文件名称字符个数,我们就直接输出他前面的字母名称
##print(old_name[:index])
#提取点后面的后缀格式
##print(old_name[index:])
new_name=old_name[:index] + '[备份]' + old_name[index:]
#print(new_name)
#备份文件写入数据
#rb 是以二进制模式去读取文件,二进制模式是所有文件存存储后的模式,所以电脑去存储都是二进制存储的
old_f=open(old_name,'rb')
#打开备份文本,并备份
#wb 是二进制写入模式,我们上面读是二进制读取,写也是二进制的去写
new_f=open(new_name,'wb')
#如果不确定文件的大小,就好比有的文件几十g有的几m,这时候就要循环读取了,当读取为空的时候,就停止循环读取
while True:
#读取大小
con=old_f.read()
#当读取为空就停止读取
if len(con) == 0:
break
#写入
new_f.write(con)
#关闭文件
old_f.close()
new_f.close()
有效文件名进行备份
old_name=input('请输入你要备份的文件名:')
#提取文件后缀的下标
#当我们输入1.txt,rfind获取的下标就是1
#他获取的是点前面的字符个数
index=old_name.rfind('.')
#切片
#我们上面获取的是字符的个数而表示可视化的字母文字
#我们现在要输出字母获取文字
#index是获取点前面的文件名称字符个数,我们就直接输出他前面的字母名称
##print(old_name[:index])
#有效文件名进行备份
if index > 0:
postfix=old_name[index:]
new_name = old_name [:index] + '[备份]'+ postfix
#备份文件写入数据
#rb 是以二进制模式去读取文件,二进制模式是所有文件存存储后的模式,所以电脑去存储都是二进制存储的
old_f=open(old_name,'rb')
#打开备份文本,并备份
#wb 是二进制写入模式,我们上面读是二进制读取,写也是二进制的去写
new_f=open(new_name,'wb')
#如果不确定文件的大小,就好比有的文件几十g有的几m,这时候就要循环读取了,当读取为空的时候,就停止循环读取
while True:
#读取大小
con=old_f.read()
#当读取为空就停止读取
if len(con) == 0:
break
#写入
new_f.write(con)
#关闭文件
old_f.close()
new_f.close()
当输入文件名不正确不存在就爆错
文件和文件夹的操作
文件重命名
#导入os模块
#使用os模块内功能
import os
os.rename(目标文件名,新文件名)
#导入os模块
#使用os模块内功能
import os
mb=input('目标文件:')
xwj=input('新文件名称:')
cmm=os.rename(mb,xwj)
删除文件名
#导入os模块
#使用os模块内功能
import os
os.remove(目标文件名)
#导入os模块
#使用os模块内功能
import os
mb=input('目标文件:')
os.remove(mb)
创建文件夹
#导入os模块
#使用os模块内功能
import os
cjwj=input('文件夹名称:')
os.mkdir(cjwj)
删除文件夹
#导入os模块
#使用os模块内功能
import os
sc=input('删除文件夹名称:')
os.rmdir(sc)
获取当前目录
#导入os模块
#使用os模块内功能
import os
print(os.getcwd())
改变默认目录
#导入os模块
#使用os模块内功能
import os
#来到aa目录
os.chdir('aa')
#创建bb文件夹
os.mkdir('bb')
获取目录列表
#导入os模块
#使用os模块内功能
import os
print(os.listdir())
#导入os模块
#使用os模块内功能
import os
#获取aa文件夹里面的列表
print(os.listdir(aa))
应用
批量重命名
#导入os模块
#使用os模块内功能
import os
#获取目录列表
file_list = os.listdir()
#构造名字
#在每个文件名称前面加个python_
for i in file_list:
#nwe_nmae = 'python_' + 原文件i
nwe_name = 'python_' + i
#重命名
os.rename=(i,new_name)
总结
- 文件操作步骤
文件对象=open(目标文件,访问模式)
-
操作
读
- 文件对象.read()
- 文件对象.readlines()
- 文件对象.readline()
写
文件对象.write()
seek()
-
关闭
文件对象.close()
-
主访问模式
w:写,文件不存在则新建该文件
r:读,文件不存在则报错
a:追加
-
文件和文件夹操作
重命名:os.rename()
获取当前目录:os.getcwd()
获取目录列表:os.listdir()
\