1、文件操作三步走
① 打开文件
② 读写文件
③ 关闭文件
2、open函数打开文件
在Python,使用open()函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下:
f = open(name, mode) 注:返回的结果是一个file文件对象(后续会学习,只需要记住,后续方法都是f.方法())
name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
mode:设置打开文件的模式(访问模式):只读r、写入w、追加a等。
r模式:代表以只读模式打开一个已存在的文件,后续我们对这个文件只能进行读取操作。如果文件不存在,则直接报错。另外,r模式在打开文件时,会将光标放在文件的第一行(开始位置)。
w模式:代表以只写模式打开一个文件,文件不存在,则自动创建该文件。w模式主要是针对文件写入而定义的模式。但是,要特别注意,w模式在写入时,光标也是置于第一行同时还会清空原有文件内容。
a模式:代表以追加模式打开一个文件,文件不存在,则自动创建该文件。a模式主要也是针对文件写入而定义模式。但是和w模式有所不同,a模式不会清空文件的原有内容,而是在文件的尾部追加内容。
文件路径:① 绝对路径 ② 相对路径
① 绝对路径:绝对路径表示绝对概念,一般都是从盘符开始,然后一级一级向下查找(不能越级),直到找到我们要访问的文件即可。
比如访问C盘路径下的Python文件夹下面的python.txt文件,其完整路径:
Windows C:\Python\python.txt Linux /usr/local/nginx/conf/nginx.conf
绝对路径一般路径固定了,文件就不能进行移动,另外在迁移过程中会比较麻烦。
② ==相对路径==:相对路径表示相对概念,不需要从盘符开始,首先需要找到一个参考点(就是Python文件本身)
同级关系:我们要访问的文件与Python代码处于同一个目录,平行关系,同级关系的访问可以使用./文件名称
或者直接写文件名称
即可
上级关系:如果我们要访问的文件在当前Python代码的上一级目录,则我们可以通过../
来访问上一级路径(如果是多级,也可以通过../../../去一层一层向上访问
下级关系:如果我们要访问的文件在与Python代码同级的某个文件夹中,则我们可以通过文件夹名称/
来访问某个目录下的文件
3、write函数写入文件
基本语法:
f.write('要写入的内容,要求是一个字符串类型的数据')
4、close函数关闭文件
f.close()
5、入门级案例
# 1、打开文件 f = open('python.txt', 'w') # 2、写入内容 f.write('人生苦短,我学Python!') # 3、关闭文件 f.close()
强调一下:中文乱码问题,默认情况下,计算机常用编码ASCII、GBK、UTF-8
6、文件的读取操作
read(size)方法
:主要用于文本类型或者二进制文件(图片、音频、视频...)数据的读取
size表示要从文件中读取的数据的长度(单位是字符/字节),如果没有传入size,那么就表示读取文件中所有的数据。
f.read() # 读取文件的所有内容 f.read(1024) # 读取1024个字符长度文件内容,字母或数字
# 1、打开文件 f = open('python.txt', 'r', encoding='utf-8') # 2、使用read()方法读取文件所有内容 contents = f.read() print(contents) # 3、关闭文件 f.close()
readlines()方法
:主要用于文本类型数据的读取
readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。
# 1、打开文件 f = open('python.txt', 'r', encoding='utf-8') # 2、读取文件 lines = f.readlines() for line in lines: print(line, end='') # 3、关闭文件 f.close()
readline()方法
:一次读取一行内容,每运行一次readline()函数,其就会将文件的指针向下移动一行
f = open('python.txt’) while True: # 读取一行内容 content = file.readline() # 判断是否读取到内容 if not content: break # 如果读取到内容,则输出 print(content) # 关闭文件 f.close()
7、聊聊文件操作的mode模式
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
虽然mode文件操作模式很多,但是我们只需要记住3个字符即可。r、w、a
r+、w+、a+,代加号,功能全,既能读,又能写(区别在于指针到底指向不同)
rb、wb、ab,代b的字符,代表以二进制的形式对其进行操作,适合读取文本或二进制格式文件,如图片、音频、视频等格式
rb+、wb+、ab+,代加号,功能全,既能读,又能写(区别在于指针到底指向不同)
8.文件备份案例
1、案例需求
需求:用户输入当前目录下任意文件名,完成对该文件的备份功能(备份文件名为xx[备份]后缀,例如:(test[备份].txt)。
实现思路:
① 接收用户输入的文件名
② 规划备份文件名
③ 备份文件写入数据
2、代码实现
# 1、接收用户输入的文件名(要备份的文件名)
oldname = input('请输入要备份的文件名称:') # python.txt
# 2、规划备份文件名(python[备份].txt)
# 搜索点号
index = oldname.rfind('.')
# 返回文件名和文件后缀
name = oldname[:index]
postfix = oldname[index:]
newname = name + '[备份]' + postfix
# 3、对文件进行备份操作
old_f = open(oldname, 'rb')
new_f = open(newname, 'wb')
# 读取源文件内容写入新文件
while True:
content = old_f.read(1024)
if not content:
break
new_f.write(content)
# 4、关闭文件
old_f.close()
new_f.close()