Python第十六天文件操作

63 阅读8分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

文件操作

  • 文件操作的作用

  • 文件的基本操作

    打开

    读写

    关闭

  • 文件备份

  • 文件和文件夹操作

文件操作的作用

什么是文件???

文件是计算机文件属于文件的一种,文件可以是文本文档、图片、程序等等。

文件操作包含什么??

包含:打开,关闭,读,写,复制,粘贴,剪切,等等

文件操作的作用是什么??

读写内容,写入内容,备份内容

总结:文件操作的作用就是,把一些内容(数据)存储存放起来,可以让程序下一次执行的时候直接使用,而不需要重新制作一份,省时省力

文件的基本操作

  1. 打开文件
  2. 读写等操作文件
  3. 关闭文件

注意:可以只打开文件和关闭文件,不进行任何读写操作

打开

在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:文件结尾

文件备份

常见的文件备份操作就,就是复制原来的一份文件再粘贴出来,这就是最简单的文件备份的一个操作

步骤

  1. 接收用户输入的文件名
  2. 规划备份文件名
  3. 备份文件写入数据

代码实现

  1. 接收用户输入目标文件名
old_name=input('请输入你要备份的文件名:')
  1. 规划备份文件

    提取目标文件后缀

    组织备份的文件名,xx[备份]后缀

old_name=input('请输入你要备份的文件名:')
​
​
#提取文件后缀的下标
#当我们输入1.txt,rfind获取的下标就是1
#他获取的是点前面的字符个数index=old_name.rfind('.')
​
#切片
#我们上面获取的是字符的个数而表示可视化的字母文字
#我们现在要输出字母获取文字
#index是获取点前面的文件名称字符个数,我们就直接输出他前面的字母名称
print(old_name[:index])
​
​
#提取点后面的后缀格式
print(old_name[index:])
​
  1. 备份流程
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)
  1. 备份文件写入数据

打开原文件和备份文件

将原文件数据写入到备份文件

关闭文件

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 osprint(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(目标文件,访问模式)
  • 操作

    1. 文件对象.read()
    2. 文件对象.readlines()
    3. 文件对象.readline()

    文件对象.write()
    

    seek()

  • 关闭

文件对象.close()
  • 主访问模式

    w:写,文件不存在则新建该文件

    r:读,文件不存在则报错

    a:追加

  • 文件和文件夹操作

    重命名:os.rename()

    获取当前目录:os.getcwd()

    获取目录列表:os.listdir()

\