前言:
转眼间已到2022年了,今天的第一篇博客居然是在工作日完成,哈哈哈。
感觉啊,平时在日常工作中读取文件的操作还是用的相当频繁的,今天就特地抽出点时间来写一下,后续呢还会更新几篇关于文件操作的博客。
读取一个文件:
path='./test.txt'
print(open(path,'r',encoding='utf-8')) # r表示读,打开一个文件可迭代的文件对象
# 打印
<_io.TextIOWrapper name='./geckodriver.log' mode='r' encoding='cp936'>
想要看到文件的具体的内容需要加上read()读取文件中所有内容。
path='./test.txt'
i= open(path,'r',encoding='utf-8') # 文件中带有中文需要带上编码
print(i.read()) # read() 读取文件中所有内容
这样的写的话就会存在一个问题,文件在读取完后不会自动关闭需要再,f.close()掉。不关闭的话文件对象会占用一定的系统资源。而且啊操作系统打开文件系统的对象的数量也是有限的。
所以python引用了with会自动引用close方法。
with
path='./test.txt'
with open(path,'r',encoding='utf-8') as sf:
print(sf.read())
三种读取文件的方式
read():上面使用过,用于读取整个文件,如果文件过大可以用read(size)设置文件字节数量来控制。
*readlines():*读取整个文件将文件已行为单位存放在一个个列表中。
path='./test.txt'
with open(path,'r',encoding='utf-8') as sf:
print(sf.readlines())
# 打印结果:['验证读取文件操作\n', '验证能够通过']
打印结果可以看出每一行的结尾会存在换行符,这该怎么处理呢。
path='./test.txt'
with open(path,'r',encoding='utf-8') as sf:
print(sf.read().splitlines()) # 使用splitlines()方法,返回一个以各行为元素的列表。
# 打印结果:['验证读取文件操作', '验证能够通过']
*readline() :*每次都只读取一行。这个不作演示,没有什么弯弯绕。
读取json文件
当我遇到json格式的数据或者文件时该如何处理呢。
import json
path='./test.json'
with open(path,'r',encoding='utf-8') as sf:
print(json.load(sf)) # json.load()将一个json格式的可读文件转化为一个python对象。
open()的mode参数
‘r’:读
‘w’:写
‘a’:追加
‘r+’ == r+w(可读可写,文件若不存在就报错(IOError))
‘w+’ == w+r(可写可读,文件若不存在就创建)
‘a+’ ==a+r(可追加可读,文件若不存在就创建)
对应的,如果是二进制文件,就都加一个b就好啦:
‘rb’ ‘wb’ ‘ab’ ‘rb+’ ‘wb+’ ‘ab+’
我们目前测试作自动化测试的过程中遇到的最多的二进制文件可能就是图片格式的文件了,遇到需要读取二进制文件时加上b就好了。
写入文件操作
path='./aa.txt'
with open(path,'w',encoding='utf-8') as sf:
sf.write('hello,world\n你好啊') # write()往文件中进行写入操作
后面的往中间中追加啊等操作就不一一举例子了。
数据以json格式存入文件
dict = {"name":"Tom", "age":23}
with open('test1_json','w') as sf:
json.dump(dict,sf,ensure_ascii=False,indent=4) # json.dump()共分为两个动作,一个动作是将“obj”格式,转化为json格式,另一个操作是将其存放在文件中。
json模块
一直在考虑json模块要不要单独分出来写,但是这其实也没有啥东西,在我们操作文件的过程中跟json格式肯定要一直打交到的。
json.dumps() # 将数据类型转化为json格式的字符串,其实啊就是将字典格式转化为json格式
dict = {"name":"Tom", "age":23}
print(type(dict))
# 打印为dict
dict=json.dumps(dict)
print(type(dict))
# 打印为str
json.dump # json.dump()共分为两个动作,一个动作是将“obj”格式转化为json格式,另一个操作是将其存放在文件中。博主的理解就是将python中的字典格式转化成json格式并将其保存对应文件中。具体上方已有例子。
json.loads() # json.loads()将str类型的json格式转化为一个python对象。这个博主的理解呢就是,我们在用read()读取json格式文件时此时读到的数据是str类型的json格式,我们需要用json.loads()将其转换成python对象。
import json
path='./test.json'
with open(path,'r',encoding='utf-8') as sf:
ad=sf.read()
print(type(ad))
print(type(json.loads(ad)))
# 打印:<class 'str'>
# 打印:<class 'dict'>
json.load() # 就是直接将一个可取的json文件转化为一个python对象。这我相信不需要额外解释了,就是字面含义啦。
os模块对文件、文件夹的操作
说起os模块呢应该是python中使用比较频繁的一个模块了,这里就介绍一个os模块对于文件操作比较常用的方法吧。
path = os.path.dirname(__file) 当前文件绝对路径
os.path.abspath(__file__) 当前文件绝对路径
os.getcwd() 显示当前python脚本工作路径
os.listdir('path')显示指定目录下的所有文件和目录名
os.remove('filename') 删除一个文件
os.makedirs('dirname/dirname')生成可多层递归目录
os.mkdir('./path') 新建一个文件夹
os.rmdir('dirname') 删除单级目录
os.rename('oldname','newname')重命名文件
os.walk(path) 遍历文件夹下所有文件以及文件夹
os.system() 调用命令行模式
os.path.dirname(path) 返回当前路径的父目录
os.path.basename(path) 返回该路径下最后一个目录或者文件
os.path.isfile(path) 如果path是一个文件返回TRUE
os.path.isdir(path) 如果path是一个目录则返回true
os.path.join(path,name) 连接目录与文件名或目录 结果为path/name
os.path.exists(path) 文件是否存在的,如果存在返回true 如何不存在放回false
都是拿来即用的方法就不一一举例子啦。