一、在 Python 中使用文件的关键函数是 open() 函数。open() 函数有两个参数:文件名(file)和模式(access_mode)
access_mode参数有:
r : 以只读方式打开文件。文件的指针将在文件开头。这是默认模式。
rb: 以二进制格式打开一个文件用于只读。一般用于非文本文件如图片等
r+ : 打开一个文件用于读写(文件的指针将在文件开头)
w : 打开一个文件只用于写入,如果文件存在,删除重新编辑,否则新建
wb : 以二进制格式打开一个文件只用于写入
w+ : 打开一个文件用于读写。如果文件存在,删除重新编辑,否则新建写入
a : 打开文件追加内容,存在文件,在文件原内容后增加,否则新建写入
a+ : 打开一个文件用于读写。存在文件,在文件原内容后增加,否则新建用于读写
ab : 以二进制格式打开一个文件用于追加,存在文件,在文件原内容后增加,否则新建写入
ab+ : 以二进制格式打开一个文件用于读写。存在文件,在文件原内容后增加,否则新建用于读写
#往文件写入数据
file.write(string) #可将任何字符串写入一个打开的文件
file.flush() #刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件
file.close() #刷新缓冲区里任何还没写入的信息,并关闭该文件
#读取文件内容
file.read([u'读取字符长度']) #从一个打开的文件中读取一个字符串
file.close() #刷新缓冲区里任何还没写入的信息,并关闭该文件。
#其他与文件相关的方法:
file.tell() #告诉你文件指针的当前位置
file.seek(offset=10,whence=2)
#改变当前文件指针的位置。必须以二进制方式打开的文件。offset表示要移动的字节数
#whence变量指定开始移动字节的参考位置。如果whence为0,将文件的开头作为移动字节的参考位置。如果
#设为1,则使用当前的位置作为参考位置。如果为2,那么该文件的末尾将作为参考位置
f = open("myfile.txt","x") #创建,创建一个空的新文件
f2 = open("myfile1.txt","w") #写入,如果文件不存在,则创建新文件
f3 = open("myfile3.txt","a") #追加,如果文件不存在,则创建新文件
with open("test.txt","r",encoding="utf-8") as file:
print(file.tell())
# 改变指针位置,读取中间部分内容
file.seek(6,0) #以文件开头开始,改变指针移动六个字节
print(file.tell()) #现在指针指在第六个字节处
print(file.readline()) #一行一行打印,将指针所在的这行打印出来
print(file.read(5)) #指定要返回的字符数("n基础"-一个中文等于两个字节)
print(file.read()) #从指针所在位置后的内容全部打印出来
print(file.tell()) #指针在内容最末端
#注:指针位置影响最终获取到的值:如果先写入再读,指针在最后一位,容易读不到文件内容
#例一:
str1= '''
Python基础
接口自动化
web自动化
app自动化
'''
file4 = open(file='test.txt',mode='w',encoding='utf-8')
print(file4.write(str1))
file4.close()
#例二:
html = '''
<html>
<body>
<h1>我的第一个标题</h1>
<p>我的第一个段落。</p>
</body>
</html>
'''
file1 = open(file='test.html',mode='w') #删除原内容再写入(覆盖原内容)
print(file1.write(html))
file1.close()
file2 = open(file='test.html',mode='a') #在原文内容后追加
#print(file2.write("my name is vv"))
file3 = open(file='test.html',mode='a+') #用于读写,在原文内容后追加
#print(file3.write("python is so easy"))
import os
# os.remove('myfile.txt') #当文件不存时容易报错
# f = open('myfile.txt','x')
#检查文件是否存在
if os.path.exists('myfile.txt'):
os.remove('myfile.txt')
else:
print("未找到该文件")
#删除整个文件夹
# os.rmdir('a') #只能删除空文件
print(os.getcwd()); #返回当前工作目录
file0 = '/Users/vv/PycharmProjects/untitled3.9/functions/B'
os.mkdir(path=file0,mode=755);
#os.path模块
file0 = '/Users/vv/PycharmProjects/untitled3.9/functions/B'
print(os.path.abspath('.')) #返回当前文件的绝对路径
print(os.path.getatime('.')) #返回最近一次访问文件的时间
print(os.path.getctime('./B'))
print(os.path.basename(file0)) #返回: B
#返回文件名
print(os.path.dirname(file0))
#返回文件夹的路径:/Users/vv/PycharmProjects/untitled3.9/functions
print(os.path.split(file0))
#返回文件夹与文件名的元祖存储模式:('/Users/vv/PycharmProjects/untitled3.9/functions', 'B')
print(os.path.join(file0,'test'))
#返回拼接:/Users/vv/PycharmProjects/untitled3.9/functions/B/test
import time
print(time.gmtime(os.path.getmtime(file0)))
#返回时间: time.struct_time(tm_year=2021, tm_mon=7, tm_mday=23, tm_hour=6, tm_min=26, tm_sec=32, tm_wday=4, tm_yday=204, tm_isdst=0)
-
总结:使用with open() as file,这种语法如果出现错误不需要再次关闭文件