文件的操作
语法: open(文件路径,访问模式,encoding=编码格式)
文件路径:
- 指定路径
"C:\path\file.txt"
r"C:\path\file.txt"
(windows下用""来分隔路径
unix下用"/"分隔路径) - 不指定路径
file.txt,会在程序运行的目录下创建
可以使用os模块改变路径
打开文件的三种访问模式
r:只读模式,默认
w:写入模式(覆盖)
a:追加模式
wb:以二进制形式打开一个文件用于写入一般用于非文本文件,图片
编码格式:
防止中文乱码
GBK
UTF-8
文件的常用方法:
.read() 方法读取文件的全部内容
.seek() 移动指针
.write() 向文件写入字符串
.readline(num) num给数字几,就输出几个字符
.readline() 按行,一行一行的读取文件数据
.readlines() 按行读取全部内容,返回的是一个文件数据列表,每一行是列表的一个元素
对于只读模式(r)来说,如果文件不存在则报错:
file = open("text.txt","r") #text.txt 并不存在
file.close() #调用完需要将打开的文件关闭
运行结果:
Traceback (most recent call last):
File "G:/PyCharm_/python_basic/day08/demo01.py", line 1, in <module>
file = open("text.txt","r")
FileNotFoundError: [Errno 2] No such file or directory: 'text.txt'
对于写入模式(w)来说,如果文件不存在,仍会报错,但会创建一个新的文件,如果文件已存在将会覆盖原文件.
例如,向C盘一个文件写入"hi!"
file = open(r"C:\Users\123\1.txt","w")
file.write("hi!")
file.close()
执行后,会在 “C:\Users\123\1.txt” 写入 “hi!”
我们使用.read()来读取刚才写进的内容
file = open(r"C:\Users\123\1.txt","r")
print(file.read())
file.close()
运行结果:
hi!
接下来我们在上述内容后追加内容"good morning!"
#向文本内追加内容
file = open(r"C:\Users\123\1.txt","a",encoding="utf-8")
file.write(" \ngood morning!")
file.close()
#输入文本里的内容
file1 =open(r"C:\Users\123\1.txt","r",encoding="utf-8")
print(file1.read())
运行结果:
hi!
good morning!
如果我们需要一行一行的输出,可以使用.readline() 或 .readlines()
使用.readline()
file1 = open(r"C:\Users\123\1.txt","r",encoding="utf-8")
print(file1.readline())
print(file1.readline())
运行结果:
hi!
good morning!
使用.readlines()会生成一个列表,所以下面的内容中,我们把列表遍历输出
#向文本内追加内容
file1 = open(r"C:\Users\123\1.txt","r",encoding="utf-8")
# print(file1.readlines()) #使用.readlines() 会生成一个列表
data = file1.readlines()
i = 1
for nr in data:
print("第{}行内容为{}".format(i,nr))
i=i+1
运行结果:
第1行内容为hi!
第2行内容为good morning!
注意: 考虑到安全因素,文件调用完记得使用 file.close()将文件关闭.
.read() 和 .seek()
当我们使用 .read()输出完内容后,再次调用输出内容为空,是因为指针这时指向了最后,如果我们想要再次输出的话可以使用.seek()来改变指针的位置,从而再次输出.
file1 = open(r"C:\Users\123\1.txt","r",encoding="utf-8")
print(file1.read())
print(file1.read())
我们可以看到运行结果,只有一次内容输出
hi!
good morning!
使用.seek()后
file1 = open(r"C:\Users\123\1.txt","r",encoding="utf-8")
print(file1.read())
file1.seek(0)
print(file1.read())
运行结果:
hi!
good morning!
hi!
good morning!
.readline(num)的用法
例如,我们输出该文件的第一个字符
file1 = open(r"C:\Users\123\1.txt","r",encoding="utf-8")
data1 = file1.readline(1)
print(data1)
运行结果:
h
安全的打开文件(自动调用.close())
with open("test.txt","w",encoding="utf-8") as f:
f.write("测试写入")
with open("test.txt","r",encoding="utf-8") as f:
for line in f:
print(line,end="")
运行结果:
测试写入
利用os模块对文件的一些基本操作
使用内置模块时需要先引用
所以使用: import 引用
对路径可以加\表示是路径,也可以在前面加R或者r表示
import os
os.mkdir(r"C:\Users\123\one") #在某个路径下创建文件夹,对C盘操作可能没有权限,会报错
print(os.getcwd()) #获取程序运行的当前目录
print(os.chdir(r"E:\1111")) #改变到某个目录下
print(os.getcwd())
os.chdir("../") #切换到上级目录
print(os.getcwd())
a=os.listdir(r"E:\1111") #获取指定目录下的文件列表
print(a)
os.rmdir(r"E:\1111") #删除空的文件夹
import shutil
shutil.rmtree(r"E:\1111\444") #删除非空的文件夹