文章目录
- 前言
- 文件的基本操作
- 打开文件操作
- 关闭文件操作
- 对文件进行操作
- 1)只读文件操作
- read()
- readlines()
- readline()
- seek()
- 2)只写文件操作
- 3)文件追加操作
- 读写、追加读写操作
- 1. r+ 模式打开文件
- 2. w+ 模式打开文件
- 3. a+ 模式打开文件
- 以二进制的形式打开文件并操作
- 备份文件操作
- 提示用户输入文件名,并生成一个有效的备份文件名
- 将原文件中的数据拷贝到新文件中
- 文件和文件夹操作
- 1.文件重命名
- 2.删除文件
- 3.创建文件夹
- 4.删除文件夹
- 5.获取当前目录
- 6.改变默认目录
- 7.获取目录列表
前言
我们应该都知道,我们日常使用的电脑和手机其实很多的操作对象都是文件,我们的键盘和屏幕也可以类似看成是文件,文件在我们的日常生活中起着非常大的作用,因为文件可以持久的存储数据。而作为学习 python 的我们来说,文件操作的学习也是必不可少的,那么今天我将为您提供实用的知识和技巧,让您能够轻松应对各种文件操作任务。让我们一同探索Python文件操作的魅力,开拓数据处理的新境界吧!🚗🚗
文件的基本操作
打开文件操作
open(name,mode)
- name:指要打开的目标文件名的字符串(也可以是文件的具体路径)
- mode:设置打开文件的模式(访问模式)
我们可以使用一个变量来接收 open 返回的文件对象,为后面的操作做准备。
这里打开文件操作没多少需要注意的,唯一需要注意的就是,当我们以读的形式打开文件的时候,此文件必须存在,否则就会报错。
f = open('test.txt','r')
这里我们提前创建一个 test.txt
文件。
f = open('test.txt','r')
关闭文件操作
当我们打开文件的时候,到最后要记住关闭这个文件,否则会一直占用着我们的资源。
文件对象.close()
关闭文件操作
f = open('test.txt','r')
f.close()
对文件进行操作
1)只读文件操作
进行读文件操作的时候,我们需要以 读 的形式打开文件。
我们先在 test.txt
文件中准备点数据,然后我们进行读文件操作。
read()
read(num) 当不传入num的时候,表示读取文件中的所有数据,如果传入num参数,表示读取num个字节的数据。
# 打开文件
f = open('test.txt','r')
# 进行文件操作
print(f.read())
# 关闭文件
f.close()
带有num参数
# 打开文件
f = open('test.txt','r')
# 操作文件
print(f.read(7))
# 关闭文件
f.close()
记住换行符也算一个字节
readlines()
readlines() 函数读取文件中的每一行,以列表的形式返回数据,每一行的数据是列表的每一个元素。
# 打开文件
f = open('test.txt','r')
# 进行文件操作
print(f.readlines())
# 关闭文件
f.close()
这里为什么会出现 \n ,因为我们在向文件中输入信息的时候敲了回车键,回车键 \n 也被认为是一个字符。
readline()
readline() 函数每一次就只读取文件的一行,再次调用readline() 函数的时候,会继续从下一行开始读取。
# 打开文件
f = open('test.txt','r')
# 进行文件操作
print(f.readline())
print(f.readline())
# 关闭文件
f.close()
seek()
seek() 函数用来移动文件指针。
文件对象.seek(偏移量,起始位置)
偏移量单位为字节
当起始位置:
- 为0时,表示文件开头
- 为1时,表示文件当前位置
- 为2时,表示文件的末尾
# 打开文件
f = open('test.txt','r')
# 进行文件操作
f.seek(2,0) # 从与文件开头处偏移量为两个字节的位置开始
print(f.readline())
print(f.readline())
# 关闭文件
f.close()
2)只写文件操作
当进行写文件操作的时候,需要以 写 的模式打开文件。
# 打开文件
f = open('test.txt','w')
当我们运行完这段代码的时候,我们发现 test.txt
文件里面的内容消失了。
这是因为,当我们以 写 的模式打开文件的时候,文件指针会回到文件开头处,并且写入会覆盖原有内容。
不仅如此,当我们以 写 的模式打开文件的时候,如果文件不存在,会自动创建该文件。
我们先将之前创建的 test.txt
文件给删除了,然后以 写 的形式打开 test.txt
文件。
# 打开文件
f = open('test.txt','w')
当我们运行这段代码的时候,我们会发现自动创建了 test.txt
文件。
向文件中写入数据
文件对象.write()
# 打开文件
f = open('test.txt','w')
# 写入数据
f.write('abcdef')
# 关闭文件
f.close()
后面的操作,原文件中默认数据为abcdef。
3)文件追加操作
使用文件追加操作的时候需要以 文件追加 的模式的打开文件,并且如果该文件不存在,也会自动创建一个文件。
# 打开文件
f = open('test.txt','a+')
# 操作文件
f.write('12345')
# 关闭文件
f.close()
读写、追加读写操作
当我们以 w+、r+ 的模式打开文件的时候,可以对文件进行读和写的操作,但是我们需要注意文件指针的位置。
1. r+ 模式打开文件
# 打开文件
f = open('test.txt','r+')
# 操作文件
print(f.read())
f.write('@@@@@')
# 关闭文件
f.close()
这里当我们写入数据的时候,为什么没有覆盖原数据呢?我们要注意文件指针的位置,当我们进行完读操作后,文件指针位于文件的末尾,然后写操作是从文件指针所在的位置开始写入的。
python 使用 r+ 模式打开文件具有以下特性:
-
读取和写入:r+模式可以同时进行读取和写入操作。它允许您在读取文件内容的同时,通过write()方法写入新的内容到文件中。这种模式非常适用于需要读取和修改文件内容的情况。
-
文件指针位置:在使用r+模式打开文件后,文件指针的初始位置将位于文件的开头。您可以使用seek()方法将文件指针移动到您需要读取或写入的位置。请注意,在进行写入操作时,新的内容将从文件指针的位置开始写入,可能会覆盖原有内容。
-
文件截断:r+模式不会自动截断文件。如果您在写入操作时,新的内容比原有内容更短,那么一部分原有内容可能仍然保留在文件中。因此,如果您希望完全覆盖文件并只保留新的内容,可以使用truncate()方法来截断文件,或者在打开文件时选择w模式。
-
文件不存在:如果使用r+模式打开的文件不存在,将会引发FileNotFoundError异常。因此,在使用r+模式打开文件之前,请确保文件已经存在或您有相应的错误处理机制。
这里我们针对第三种特性举一个例子:
原 test.txt
文件中含有数据abcdef。
# 打开文件
f = open('test.txt','r+')
# 操作文件
f.write('@@@@@')
print(f.read())
# 关闭文件
f.close()
当我们进行写入操作的时候,文件指针在文件开始处,写入数据从文件指针所在的位置开始写入,所以就会覆盖掉原有的五个长度的内容,文件指针也会随之移动,当进行读操作的时候也会从文件指针所在的位置开始读取。简单来说就是我们需要随时注意文件指针所在的位置。读写和追加操作都是从文件指针所在的位置开始的。
2. w+ 模式打开文件
原 test.txt
文件含有abcdef数据。
# 打开文件
f = open('test.txt','w+')
# 操作文件
print(f.read())
f.write('@@@@@')
# 关闭文件
f.close()
当我们使用 w+ 模式打开文件的时候,如果文件不存在,则创建文件,如果文件存在,则会先清空文件中原有的数据。
3. a+ 模式打开文件
当以 a+ 模式打开文件时,文件指针默认会在文件的末尾,所以我们直接打印数据的时候,什么都打印不出来,这需要我们配合着seek() 函数来使用。
# 打开文件
f = open('test.txt','a+')
# 操作文件
print(f.read())
f.write('@@@@@')
# 关闭文件
f.close()
将文件指针设置到文件开头
# 打开文件
f = open('test.txt','a+')
# 操作文件
f.seek(0)
print(f.read())
f.write('@@@@@')
# 关闭文件
f.close()
以二进制的形式打开文件并操作
以 rb、wb、ab、rb+、wb+、ab+的形式打开文件并操作,都是以二进制的形式展现和操作的,其他操作都是一样的。
以二进制的形式读
# 打开文件
f = open('test.txt','rb')
# 文件操作
print(f.read())
# 关闭文件
f.close()
以二进制的形式写
我们再写入的时候需要使用 b' '
来表示写入的是二进制。
# 打开文件
f = open('test.txt','wb')
# 文件操作
f.write(b'zhangsan')
# 关闭文件
f.close()
这里虽然我们看到的还是一样的,但其实它是以二进制的形式表现的。
备份文件操作
在生活中,我们也会经常遇到文件备份的操作,那么我将为大家来揭晓文件备份操作的原理。
通常系统会提示你输入要备份的文件的名称,然后会生成一个 原文件名[备份].后缀
的文件。
提示用户输入文件名,并生成一个有效的备份文件名
因为文件的后缀是由最后一个出现的 . 的以及 . 后面的字符串所组成的,所以我们需要找到最后一个出现的 . 的位置,并且根据 . 的位置是否为 0 来判断文件名的合法性。.txt
这种文件名就是不合法的。
old_name = input('请输入你要备份的文件的名称:')
index = old_name.rfind('.') # 从后往前找,找到的第一个.的位置就是最后一个.的位置
if index > 0: # 判断文件名的合法性
postfix = old_name[index:]
new_name = old_name[:index] + '[备份]' + postfix # 组合成新的备份文件名
将原文件中的数据拷贝到新文件中
因为原文件中数据可能较多,一次拷贝可能会出现问题,所以我们分多次拷贝,一次拷贝部分数据。
# 打开原文件,并创建备份文件
old_f = open(old_name,'r')
new_f = open(new_name,'w')
while True:
con = old_f.read(1024)
if len(con) == 0: # 当读取的内容长度为0时,表明原文件内容已读取完
break
new_f.write(con)
文件和文件夹操作
在 python 中,文件和文件夹操作需要借助模块 os 里面的相关功能,所以我们需要导入 os 模块 import os
1.文件重命名
os.rename(原文件名,新文件名)
import os
os.rename('test.txt','test1.txt')
2.删除文件
os.remove(文件名)
os.remove('test1.txt')
3.创建文件夹
os.mkdir(文件夹名)
os.mkdir('aa')
4.删除文件夹
os.rmdir(文件夹)
os.rmdir('aa')
5.获取当前目录
os.getcwd()
print(os.getcwd())
6.改变默认目录
os.chdir(目录)
如果我们想要在文件夹 aa 下面再创建一个文件夹 bb 该怎么办呢?
os.mkdir('aa')
os.mkdir('bb')
这样可以吗?
显然不行,aa和bb属于同一级目录,这是因为默认目录是这个:
添加文件夹也是在这个默认目录下添加的,那么如果我们想要在aa文件夹下创建bb文件夹,就需要我们更改默认目录。
os.mkdir('aa')
os.chdir('aa') # 更改默认目录为aa
os.mkdir('bb')
7.获取目录列表
os.listdir(目录)
os.listdir(目录) 会以列表的形式返回该目录下的所有文件。
print(os.listdir('aa'))