通过内置函数open()
来打开一个文件,并返回文件对象,若无法被打开,则会抛出OSError。
open()函数的格式如下:
open(文件名称,mode="",encoding="")
参数encoding设置文件的编码格式
,参数mode设置文件的打开模式
,默认的文件访问模式为只读(r)
,比如下表文件打开模式:
模式 | 名称 | 含义 |
---|---|---|
r | 只读 | 以只读的形式打开,若文件不存在或无法找到,则open()函数调用失败 |
w | 只写 | 以只写的形式打开,若文件已存在,则重写文件,否则创建文件 |
a | 追加 | 以只写的形式打开,只允许在该文件末尾追加数据,若文件不存在,则创建文件 |
默认的模式为文本模式(不加后缀时),若要以二进制模式打开文件
,则可在r、w、a后面加上 b ,即rb、wb、ab。
可以在后面加上“+”,表示以可读或可写
的方式打开该文件,比如rb+,它表示在二进制模式下,以可读或可写的方式打开该文件。
程序执行完毕后,系统会自动关闭由该程序打开的文件,由于打开的文件数量有限以及打开过多会占用系统资源,所以当文件使用完毕后主动关闭文件以释放内存,tg1使用内置的close()
方法关闭文件,该方法没有参数。
调用格式如下:
文件名称.close()
通过read()
方法从文件中读取指定数据
,该方法内size参数
用于设置读取数据的字节数,缺省情况下,读取文件所有的数据
。
创建了一个file1.text文件,在pythonProject项目下,其文本内容为“HELLO WORLD!”:
另在项目中创建一个名称为test.py的python文件,下列为python代码,打开并通过read()方法有参/无参读取数据:
# 读取文件file1.txt中5个字节以及全部数据
get_data = open("file1.txt", mode="r", encoding="utf-8")
print(get_data.read(5))
get_data.close()
get_data = open("file1.txt", mode="r", encoding="utf-8")
print(get_data.read())
get_data.close()
readline()
方法用于从文件中读取一行数据
。
file2.txt文件:
这里,也是谷歌量子 AI 实验室 (Quantum AI Campus) 的新家。
在这里,一群来自全世界最优秀的工程师、量子力学研究者、艺术家和自然科学家正在共同协作。
python文件:
# 读取文件file2.txt中一行数据
get_data = open("file2.txt", mode="r", encoding="utf-8")
print(get_data.readline())
get_data.close()
readlines()
方法用于一次读取文件的所有内容
,该方法会返回一个列表
,文件中的每一行对应列表中的一个元素。
file2.txt文件:
这里,也是谷歌量子 AI 实验室 (Quantum AI Campus) 的新家。
在这里,一群来自全世界最优秀的工程师、量子力学研究者、艺术家和自然科学家正在共同协作。
python文件:
# 读取文件file2.txt的所有内容
get_data = open("file2.txt", mode="r", encoding="utf-8")
print(get_data.readlines())
get_data.close()
通过write()
方法用于向文件中写入数据
,若写入数据成功,则该方法会返回写入该文件的数据长度
。
file1.txt文件:
HELLO WORLD!
python文件:
get_data = open("file1.txt", mode="w+", encoding="utf-8")
print(get_data.write("hello python!"))
get_data.close()
运行结果如下,可看出本次写入file1.txt文件的数据长度为13:
writelines()
方法用于向文件中写入字符串序列
,可以是一个字符串列表。
file1.txt文件:
hello world!
python文件:
get_data = open("file1.txt", mode="w+", encoding="utf-8")
get_data.writelines(["python", "hello"])
get_data.close()
Python有用于获取文件读/写位置的tell()方法和修改文件读/写位置的seek()方法。
通过tell()
方法获取文件的读/写位置。
file1.txt文件:
HELLO WORLD!
python文件,首先使用read()方法读取文件中的两个字节,然后通过tell()方法输出文件读取的位置:
get_data = open("file1.txt", mode="r", encoding="utf-8")
print(get_data.read(2))
print(get_data.tell())
get_data.close()
通过seek()
方法设置文件的读/写位置,通过移动文件读取指针到文件的指定位置,它有两个参数分别为:第一个参数为offset偏移量
,表示读/写位置需移动的字节数
;第二个参数为from
指定文件的读/写位置
,它的取值有0、1和2,分别表示在开始位置读/写、在当前位置读/写和在末尾位置读/写,默认情况下from值为0(即从文件开始位置读/写)。
file1.txt文件:
abcdefgh
python文件:
get_data = open("file1.txt", mode="r", encoding="utf-8")
get_data.seek(0)
print(get_data.read())
get_data.seek(3)
print(get_data.read())
get_data.seek(0, 0)
print(get_data.read())
get_data.seek(5, 0)
print(get_data.read())
get_data.close()
通过os模块
中的mkdir()函数
创建目录,函数内参数为目录的名称,另外还有参数mode表示目录的数字权限。
python代码:
import os
os.mkdir("package2")
创建成功,在项目栏中看到package0目录:
也可以在PyCharm中直接通过项目创建目录,右键项目,找到新建——目录如下:
输入目录名称,即可创建目录:
创建完成后可以在项目栏看到所创建的目录package2:
通过shutil模块
中的rmtree()函数
可删除目录。
例如输入一个目录,首先通过os模块中的exists()函数判断该目录是否存在,若存在则删除该目录,否则创建一个新目录,python代码如下:
import os
import shutil
content = input("请输入要查找的目录:")
i = os.path.exists("content")
if i is True:
shutil.rmtree("content")
print("该目录已存在!已自动删除!")
else:
print("该目录不存在!")
Y_N = input("是否创建新目录?")
if Y_N == "Y" or Y_N == "y":
os.mkdir(content)
print(f"{
content}目录已创建成功!")
可以通过os模块
中的listdir()函数
获取目录下的文件列表。
python代码:
import os
print(os.listdir("package1"))
文件路径分为相对路径和绝对路径,相对路径
是指一个文件或文件夹所在路径与其它文件或文件夹的路径关系,而绝对路径
是指从盘符(即磁盘区)到当前位置的路径。
以下是几个os模块中常用的关于路径的函数:
1、通过os模块中的isabs()函数判断文件或文件夹的路径是否为绝对路径,若为绝对路径则返回True,否则返回False。
python代码:
import os
print(os.path.isabs("file1.txt"))
print(os.path.isabs("file2.txt"))
运行结果如下,可见两个文件的路径都是相对路径:
2、通过os模块中的abspath()函数规范化文件或文件夹路径,即使用该函数将文件或文件夹的路径规范化成绝对路径。
python代码,首先通过isabs()函数判断其路径为相对路径,然后通过abspath()函数将该路径转换为绝对路径:
import os
print(os.path.isabs("file1.txt"))
print(os.path.abspath("file1.txt"))
运行结果如下:
3、通过os模块中的getcwd()
函数获取当前路径。
python代码:
#test.py文件
import os
print(os.getcwd())
运行结果如下,输出test.py文件的当前路径:
4、通过os模块中的exists()函数判断路径是否有效存在,若存在则返回True,否则返回False。
5、通过os模块中join()函数拼接路径,函数内的参数即要拼接的路径,若其中要拼接的最后一个路径为空,则拼接生成的路径会以"\"结尾。