0x00:概述
一、什么是文件
- 内存中存放的数据在计算机关机后就会消失。要长久保存数据,就要使用硬盘、光盘、U 盘等设备。为了便于数据的管理和检索,引入了“文件”的概念。
- 计算机文件(或称文件、电脑档案、档案),是存储在某种长期储存设备上的一段数据流。所谓“长期储存设备”一般指磁盘、光盘、磁带等。其特点是所存信息可以长期、多次使用,不会因为断电而消失。
二、文件的作用
- 把一些长期存储存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力
- 通俗来讲,文件的作用就是持久化存储数据
0x01:文件的基础操作
一、文件的打开和关闭
文件操作流程
- 打开文件,或者新建一个文件
- 读/写数据
- 关闭文件
- 打开文件
在Python中,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件
语法格式:
文件变量 = open(文件名称, 访问模式)
- 注意:文件名称,访问模式都是字符串格式
_file = open('fox.txt', 'w')
关闭文件
手动关闭文件
- 关闭文件,为了释放资源
- 语法格式:
文件变量.close()
- 自动关闭文件
with open("fox.txt", "w") as _file:
pass # 执行完缩进代码, 会自动关闭件
二、文件的读写
写数据
- 使用
write()
可以完成向文件写入数据 - 语法格式:
文件变量.write(内容)
""" # 1. 打开文件,只写方式打开 # 2. 写文件 # 3. 关闭文件 """ # 1. 打开文件,只写方式打开 _file = open('fox.txt', 'w') # 2. 写文件 # 写文件格式:文件变量.write(所需的内容) _file.write('hello abc') _file.write(' hello python') # 3. 关闭文件 _file.close()
- 使用
读数据
read
- 语法格式:
内容变量 = 文件变量.read(n)
n
为读取的字符数,若不设置则全部读取
- 语法格式:
# 1. 打开文件,只读方式打开,'r' # 2. 读取文件内容 # 3. 关闭文件 # 1. 打开文件,只读方式打开,'r';'r': 打开文件,必须存在,不存在,报错崩溃 _file = open('fox.txt', 'r') # 2. 读取文件内容 # 格式: 内容变量 = 文件变量.read(读取的长度) # 如果read的长度不指定,默认读取全部 _data = _file.read(4) # 读取前4个 print(_data) _data = _file.read() # 接着前面,读完所有的 print(_data) # 3. 关闭文件 _file.close()
readlines
readlines()
一次全部读出,读取所有的行,按行作为分隔条件,返回列表(每行内容是一个元素)- 语法格式:
内容列表变量 = 文件变量.readlines()
# 1. 打开文件,只读方式打开,'r' # 2. 读取文件内容 # 3. 关闭文件 # 1. 打开文件,只读方式打开,'r';'r': 打开文件,必须存在,不存在,报错崩溃 _file = open('fox.txt', 'r') # 2. 读取文件内容 # readlines: 读取所有的行,按行作为分隔条件 # 格式:内容列表变量 = 文件变量.readlines() _data = _file.readlines() print(_data) # 通过for取出列表的所有元素 for _line in _data: print(_line) # 3. 关闭文件 _file.close()
readline
readline()
每次读取文件中一行数据- 语法格式:
内容变量 = 文件变量.readline()
# 1. 打开文件,只读方式打开,'r' # 2. 读取文件内容 # 3. 关闭文件 # 1. 打开文件,只读方式打开,'r';'r': 打开文件,必须存在,不存在,报错崩溃 _file = open('fox.txt', 'r') # 2. 读取文件内容 # readline: 一次读取一行 # readline格式:内容变量 = 文件变量.readline() _data = _file.readline() print(_data) # 3. 关闭文件 f.close()
- 分片读取文件内容
在处理数据时,有可能会碰到好几个 G 大小的文件。如果通过一些工具(例如:NotePad++)打开它,会发生错误,无法读取任何内容;
这个时候若使用Python传统的读取方式
read()
或者readlines()
方法将整个文件读入内存时,在文件较大的时候,往往会引发内存溢出错误MemoryError
;所以在这个时候,我们就可以选择以分片读入的方式,一点一点的将内容读入内存中。
姿势一:使用
readline()
逐行读取
open("fox.txt", "r") as _file:
while True:_line = _file.readline() # 逐行读取 if not _line: break print(_line)
姿势二:指定每次读取的长度
open("fox.txt", "r") as _file:
while True:_data = _file.read(chunk_size) if not _data: break print(_data)
姿势三:使用
fileinput
模块
- fileinput
_line in fileinput.input(['fox.txt']):
print(_line)
0x02:文件打开详解
一、访问模式说明
访问模式 | 说明 |
---|---|
r | 只用于读取,默认模式。若文件不存在会报错。 |
w | 只用于写入。文件存在则先清空内容, 文件不存在,创建新文件。 |
a | 只用于写入。文件存在则追加内容, 文件不存在,创建新文件。 |
r+ | 用于读写。文件不存在,会报错。 |
w+ | 用于读写。文件存在则先清空内容, 文件不存在,创建新文件。 |
a+ | 用于读写。文件存在则追加内容, 文件不存在,创建新文件。 |
rb | 二进制格式的只读操作。 |
wb | 二进制格式的只写操作。 |
ab | 二进制格式的追加操作。 |
只读方式打开文件
- 只读方式打开文件,若文件不存在则会报错。
# 'r',只读方式打开文件,若文件不存在则会报错 f = open('fox.txt', 'r') f.close()
只写方式打开文件
- 只写方式打开文件,若文件不存在则会新建,若文件存在则会清空原文件内容
# 'w',只写方式打开文件,若文件不存在则会新建,若文件存在则会清空原文件内容 f = open('fox.txt', 'w') f.close()
追加方式打开文件
追加方式打开文件,若文件不存在则会新建,若文件存在则会将写光标则放在文件末尾,写数据直接写在文件末尾
- 注意:追加方式打开文件,不会清空文件内容
# 1. 'a',追加方式打开文件 f = open('fox.txt', 'a') # 2. 写数据 f.write('test_write') # 3. 关闭文件 f.close()
二、打开文件路径说明
open()
函数的文件参数说明open()
第一个参数,实际上是路径+文件名
- 路径主要分为:绝对路径 和 相对路径
绝对路径
- 绝对路径:是指文件在硬盘上真正存在的路径,是电脑完整的路径
- 一般而言,写程序很少使用到绝对路径,因为程序在本机运行可以找到这个绝对路径,但是,把程序拷贝给别人运行,别人电脑不一定有这个路径
相对路径
- 相对路径:相对于自己的目标文件位置
0x03:文件相关操作
一、文件重命名
- os模块中
rename()
可以完成对文件的重命名操作 - 语法格式:
os.rename(旧的文件名,新的文件名)
import os
os.rename("七七の女装照.jpg", "七七の巫女照.jpg")
二、删除文件
- os模块中的
remove()
可以完成对文件的删除操作,不能删除文件夹 - 语法格式:
os.remove(文件名)
import os
os.remove("七七の美颜.jpg")
三、创建文件夹
- 创建文件夹,只能创建文件夹,不能创建普通文件
- 语法格式:
os.mkdir(文件夹名)
import os
os.mkdir("藤球のLolita")
四、删除空文件夹
- 删除文件夹,只能删除空的文件夹
- 语法格式:
os.rmdir(待删除文件夹的名字)
import os
os.rmdir("狐狸の秘密")
五、获取当前目录
- 获取当前工作的路径
- 语法格式:
路径变量 = os.getcwd()
import os
_path = os.getcwd()
print(_path)
六、改变默认目录
- 改变默认目录,切换指定的路径
- 语法格式:
os.chdir(改变的路径)
import os
os.chdir("../") # 切换到上一级路径
七、获取目录列表
- 获取某个目录的文件信息,获取文件夹或文件的名字
语法格式:
目录列表变量 = os.listdir(目录路径)
- 如果不指定目录,默认当前路径
import os
file_list = os.listdir() # 获取当前目录下的文件信息
print(file_list)
八、判断文件是否存在
语法格式:
os.path.exists(需要判断的文件)
- 如果文件存在返回
True
,如果文件不存在返回False
- 如果文件存在返回
import os
_isfile = os.path.exists("苏苏の宝贝")
print(_isfile)
九、字符串与容器类型相互转换
函数 | 说明 |
---|---|
str(容器变量) | 将 容器变量 转换为一个字符串 |
eval(字符串内容) | 佛系函数,将传入的字符串内容,按格式转换为对应的容器类型。 |