python文件与文件夹相关操作
作用:把一些数据存储起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份。可持久化存储数据。
一、文件的打开和关闭(文件)
1、打开文件
1.1 open
-
语法格式:
文件变量 = open(“文件名”, “访问模式”)
- 文件名:也是路径,默认当前目录下路径。
-
注意:文件名和访问模式都是字符串格式
"""
文件操作流程
1、打开文件,或者新建一个文件(不可缺)
2、读/写数据(先将写入数据内容写入内存)
3、关闭数据(不可缺)(关闭同时会保存数据,如果不调用文件关闭函数,程序关闭时也会保存文件内容)
"""
# 'w':只写方式是打开文件,文件存在会清空文件内容,文件不存在则删除文件。
f = open("xxx.txt", 'w')
# 文件关闭
f.close()
1.2 访问模式说明
访问模式 | 说明 |
---|---|
r | 只读, 默认模式。文件的指针放在文件的开头。文件不存在,会报错。 |
w | 只写。文件存在则重新开始编辑, 文件不存在,创建新文件。 |
a | 追加。文件存在则追加内容, 文件不存在,创建新文件。 |
r+ | 读写。文件的指针放在文件的开头。文件不存在,会报错。(尽量不要使用读写操作,两个光标,不方便判断光标位置) |
w+ | 读写。文件存在则重新开始编辑。文件不存在,创建新文件。(尽量不要使用读写操作,管理光标比较麻烦) |
a+ | 读写。文件的指针将在文件的结尾。文件存在则追加内容, 文件不存在,创建新文件。(尽量不要使用读写操作,管理光标比较麻烦) |
rb | 二进制格式的只读操作,默认模式。 |
wb | 二进制格式的只写操作。文件存在则重新开始编辑, 文件不存在,创建新文件。 |
ab | 二进制格式的追加操作。文件的指针放在文件的结尾。文件存在则追加内容, 文件不存在,创建新文件。 |
rb+ | 二进制读写。文件的指针放在文件的开头。文件不存在,会报错。(尽量不要使用读写操作) |
wb+ | 二进制读写。文件存在则重新开始编辑, 文件不存在,创建新文件。(尽量不要使用读写操作) |
ab+ | 二进制追加。文件的指针放在文件的结尾。文件存在则追加内容, 文件不存在,创建新文件。(尽量不要使用读写操作) |
1.3 绝对路径与相对路径
-
绝对路径:是指文件在硬盘上真正存在的路径,是电脑完整的路径。
-
例如:在windows平台下:E:\code\Pycode
** 注意:写代码时,windows下的路径
\
需改为\\
或者改为/
,在python中\
为转义字符。eg:
E:\\code\\Pycode\\abc.txt
`E:/code/Pycode/abc.txt` (推荐这种写法)
r"E:\code\Pycode\abc.txt"
-
-
相对路径:相对于自己目标文件的位置**(推荐使用相对路径)**
1.txt
:等价于./1.txt
,当前路径下的1.txt
../1.txt
:上一级路径下的1.txt
../../1.txt
:上一级的上一级路径下的1.txt
2、关闭文件
- 作用:关闭文件,为了释放资源。关闭时会保存文件内容。
2.1 手动关闭文件
-
语法格式:
文件对象.close()
# 打开文件 # f = open("xxx.txt", 'w') # 文件关闭 # f.close()
2.2 自动关闭文件
-
语法格式:
with open(“文件名”, “访问模式”) as 文件变量:
文件操作
with open("xxx.txt", 'w') as f:
pass # 执行完缩进代码, 会自动关闭文件
二、文件的读写(文件内容)
1、写数据
1.1 write()
-
语法格式:
文件对象.write(“写入内容”)
# 文件 f = open('xxx.txt', 'w') # 文件写入 f.write("hello abd") f.write("hello python") f.write("hello world") # 文件关闭 f.close() # # 拓展:在死循环中写入文件时,就需要调用文件关闭函数, 才会将数据写入文件。 f = open('xxx.txt', 'w') while True: f.write("hello abd") f.write("hello python") f.write("hello world") f.close() # 报错:ValueError: I/O operation on closed file. # 原因:文件关闭后,再执行文件写入操作,就会报此错
1.2 编码格式
-
open打开文件,windows下默认使用 gbk(简繁体中文)编码
-
通用的编码为:utf-8(万国码)
# open打开文件,windows下默认使用gbk(简繁体中文)编码 # 打开文件(utf-8)--指定编码格式--utf-8(万国码),三个字节对应一个中文字符 f = open("xxx.txt", 'r', encoding="utf-8") r = f.read() # 你好张三 print(r) # 打开文件(gbk)--指定编码格式--gbk,两个字节对应一个中文字符 f = open("xxx.txt", 'r', encoding="gbk") r = f.read() # 你好张三 print(r)
2、读数据
2.1 read()
-
语法格式:
内容变量 = 文件对象.read(n)
n为读取的字符数,不设置则全部读取
-
根据数据长度依次读取数据内容,下一次读取内容接着上一次内容的结尾。
# 打开文件 f = open("xxx.txt", "r") # 文件比较大时,分次依次读取 r = f.read(4) print(r) # hell r = f.read(7) # 回车符算一个字符 print(r) # o abc # h r = f.read(4) print(r) # ello # 文件比较小时,可以直接读取全部内容 r = f.read() print(r) # hello abc # hello world # hello python # hello sery # 关闭文件 f.close()
2.2 readlines()
作用:一次全部读出,读出所有的行。按行作为分割条件,并返回列表(每行内容是一个元素)
-
语法格式:
内容列表变量 = 文件对象.readlines()
- xxx.txt文件内容如下:
hello abc hello world hello python hello sery
f = open("xxx.txt", 'r') data = f.readlines() print(data) # ['hello abc\n', 'hello world\n', 'hello python\n', 'hello sery'] # 通过for读出每行数据 for item_str in data_list: print(item_str) # hello abc # hello world # # hello python # # hello sery # # f.close()
2.3 readline()
作用:每次读取一行数据
-
语法格式:
内容变量 = 文件对象.readline(字符数)
f = open("xxx.txt", "r")
r = f.readline()
print(r) # hello abc
# 循环读取每行内容
# 循环读取每行内容
while True:
r = f.readline()
# 方法一:判断读取到文件结尾
if r == '': # 读取不到任何字符内容
break
print(r, end="")
# 方法二
if r:
print(r, end="")
else:
break
运行结果:
hello abc
hello world
hello python
hello sery
三、文件的相关操作(文件)
有时候,需要对文件进行重命名、删除等一些操作,Python的 os 模块中都有这种功能。
- 导入模块
import os
·
1、文件重命名
- 语法格式:
os.rename(旧的文件名,新的文件名)
import os
# 文件重命名
os.rename("xxx.txt", "xxx1.txt")
2、删除文件
-
os模块中的remove()可以完成对文件的删除操作。删除文件夹,会报错。
-
语法格式:
os.remove(待删除的文件名)
import os # 删除文件 os.remove("test.txt")
3、创建文件夹
-
只能创建文件夹,不能创建普通文件
-
语法格式:
os.mkdir(文件夹名字)
import os # 创建文件夹,只能创建文件夹,不能创建普通文件 os.mkdir("张三")
4、删除空文件夹
-
删除文件夹,只能删除空的文件夹
-
语法格式:
os.rmdir(待删除的文件夹名)
import os # 删除文件夹,"张三"文件夹为非空 os.rmdir("张三") # 报错,OSError: [WinError 145] 目录不是空的。: '张三' # 删除文件夹,"张三"文件为非空 # 先删除文件夹里面的文件 os.remove("./张三/aa") # 再删除空文件夹 os.rmdir("张三")
5、获取当前目录
-
获取当前的工作路径
-
语法格式:
路径变量 = oa.getcwd
import os # 获取当前目录current_work_dir path = os.getcwd() print(path) # O:\File\program\Day06
6、改变默认目录
-
改变默认目录,切换指定的路径
-
语法格式:
os.chdir(改变的路径)
…/…/张三/a
import os
# 改变路径
os.chdir("张三")
os.remove("a")
# 切换到上一级路径
os.chdir("../")
os.rmdir("张三")
7、获取目录列表
-
获取某个目录的文件信息,获取文件夹或文件的名字
-
语法格式:
目录列表变量 = os.listdir(指定某个目录)
- 如果不指定目录,默认当前路径
# 获取目录列表 file_list = os.listdir() print(file_list) # ['0', '1', 'A', 'B', 'C', 'D', 'info.txt', 'x', 'xxx.txt', 'xxx[备份].txt', '文件.py'] # 指定目录 file_list = os.listdir("..\Day06") print(file_list) # ['0', '1', 'A', 'B', 'C', 'D', 'info.txt', 'x', 'xxx.txt', 'xxx[备份].txt', '文件.py']
8、判断文件是否存在
语法格式:os.path.exists(需要判断的文件)
-
如果文件存在返回
True
,如果文件不存在返回False
# 判断文件是否存在 value = os.path.exists("张三") print(value) # True