读取模式
r: 以只读方式打开文件。文件的指针将会放在文件的开头。这是**默认模式**。
rb: 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+: 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+:以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
注:r和rb的区别就在于,r是打开一些人工书写的数据,而rb是以二进制格式打开一些非人工写的数据,如图片、html文件等。
w: 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb: 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+: 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+:以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a: 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab: 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+: 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
txt文件操作
语法:
with open(路径,访问模式)as 变量名:
代码块
访问模式:
w:写入,没有文件创建文件写入内容 w会覆盖原有的内容
r:读取,没有文件不会创建文件读取
a:追加,没有文件创建文件追加内容
#写
with open('./test1.txt','w',encoding='utf-8')as f:
f.write('今天星期日')
# 追加
with open('test1.txt', 'a', encoding='utf-8') as f:
f.write('1111')
#读
with open('test1.txt', 'r', encoding='utf-8') as f:
# print(f.read()) # 读取整个文件
# print(f.readline()) # 读取一行
# print(f.readlines()) # 读取所有的放在列表中
print(f.readlines()[0])
os模块
os模块:提供了处理文件和文件目录的操作
- 创建文件夹os.mkdir(path)
# file = r'D:\PythonTest\Study\class01\bb' #绝对路径写法
file = './bb' #相对路径写法
os.mkdir(file)
- os.listdir(path) 获取文件夹中的所有文件,以列表返回
os.listdir(r'D:\测试数据\123')
- 删除文件夹os.rmdir(path)
os.rmdir(file)
- 删除文件夹中的文件,包括此文件夹;shutil.rmtree(path)
import shutil
shutil.rmtree(file)
- 文件夹重命名 os.rename(要修改的文件名,修改后的文件名)
os.rename('test1.txt','test55.txt')
- shutil.copy(源文件,目标文件) 复制文件
src = r'D:\测试数据\123\111.txt'
dst = r'D:\测试数据'
shutil.copy(src, dst)
- 判断文件
# 判断是文件夹
print(os.path.isdir(file))
# 判断是文件
print(os.path.isfile(file))
- 获取文件的绝对路径
# 文件绝对路径 D:\PythonTest\Study\class01\demo01.py
print(os.path.abspath(__file__))
- 获取文件的父路径(可多次嵌套)
# 当前路径的父路径 D:\PythonTest\Study\class01
print(os.path.dirname(os.path.abspath(__file__)))
- 路径拼接 os.path.join(路径1,路径2,路径3),路径会自动加上‘\’
- 也可以用“+”拼接路径
a = os.path.join(os.path.dirname(os.path.abspath(__file__)),'bb','config.ini')
print(a)
b = os.path.join(os.path.dirname(os.path.abspath(__file__)),'bb')
print(b + '\config.ini')
yaml文件操作
yaml安装
pip install pyyaml
yaml格式
- 缩进表示层级关系 不能用tab按键 直接用空格
- #表示注释
- 字符串不需要打引号,数字想要是字符串需要自己手动打引号
- 可以创建列表 [] - 表示列表
- 可以创建字典{key:value} : 表示字典
- yaml中的数据要空格
yaml文件读取
- dict1.yaml文件示例
- 字典嵌套字典
#字典嵌套字典
#{'person': {'name': '小李', 'age': 18}, 'address': 'shanxi'}
person:
name: 小李
age: 18
address: shanxi
- yaml文件读取:yaml.load(path,Loader=yaml.FullLoader) ;(5.1版本以后要加上 Loader=yaml.FullLoader 参数读取更加安全)
with open('./data/dict1.yaml','r',encoding='utf-8')as f:
data=yaml.load(f,Loader=yaml.FullLoader)
print(data)
#输出
{'person': {'name': '小李', 'age': 18}, 'address': 'shanxi'}
- 字典嵌套列表
#字典嵌套列表
#{'name': '小李', 'age': 18, 'iphone': '123456', 'data': [123, 456]}
name: '小李'
age: 18
iphone: '123456'
data:
- 123
- 456
- 列表嵌套列表
#[['二哈', '柴犬'], ['小黑', '小白'], '人类']
-
- 二哈
- 柴犬
-
- 小黑
- 小白
-
人类
- 列表嵌套字典
#列表嵌套字典
#[{'name': '小李', 'age': 18, 'iphone': '123456'}, '今天很开心']
-
name: '小李'
age: 18
iphone: '123456'
-
今天很开心
excel文件操作
- 读取excel数据可以用 xlrd xlwt xlutils pandas openpyxl
- 安装openpyxl ; pip install openpyxl
- 打开Excel文件 load_workbook(path):加载指定路径的excel文件
import openpyxl
workbook=openpyxl.load_workbook('./data/bb.xlsx')
- 指定表单
sheet=workbook['Sheet3']
- 读取数据
- 读取所有数据
# 读取excel里面的数据
for i in sheet.values:
print(i)
#输出
('case_id', 'url', 'data', 'expect_result', '1234')
(1, 'http://api.k780.com', "{'app' : 'weather.realtime','weaid' : '1','appkey' : '54744','sign' : '71cf771fcd16ff00f58f03cda86eeb52','format' : 'json'}", "{'success': '1'}", None)
(2, 'http://api.k780.com', "{'app' : 'weather.realtime','weaid' : 'b','appkey' : '54744','sign' : '71cf771fcd16ff00f58f03cda86eeb52','format' : 'json'}", "{'success': '1'}", None)
(3, 'http://api.k780.com', "{'app' : 'weather.realtime','weaid' : 'a','appkey' : '54744','sign' : '71cf771fcd16ff00f58f03cda86eeb52','format' : 'json'}", "{'success': '1'}", None)
(4, 'http://api.k780.com', "{'app' : 'weather.realtime','weaid' : '1','appkey' : '54744','sign' : '71cf771fcd16ff00f58f03cda86eeb52','format' : 'json'}", "{'success': '1'}", None)
- 读取指定单元格 sheet['单元格'].value
id=sheet['A1'].value
print(id)
#输出
case_id
- 读取指定行列单元格 sheet.cell(row,column).value
id=sheet.cell(row=1,column=1).value
print(id)
#输出
case_id
- 写入指定数据 sheet['单元格'].value = ‘值’
sheet['E1'].value='1234'
workbook.save('./data/bb.xlsx')
- 获取整个sheep表内容 sheet.values返回的是一个可迭代对象,需要进行列表化处理 list(sheet.values);返回的列表每一行为一个元组,可以通过切片取某几行
all_value = list(sheet.values)
print(all_value)
#输出
[('case_id', 'url', 'data', 'expect_result', '1234'), (1, 'http://api.k780.com', "{'app' : 'weather.realtime','weaid' : '1','appkey' : '54744','sign' : '71cf771fcd16ff00f58f03cda86eeb52','format' : 'json'}", "{'success': '1'}", None), (2, 'http://api.k780.com', "{'app' : 'weather.realtime','weaid' : 'b','appkey' : '54744','sign' : '71cf771fcd16ff00f58f03cda86eeb52','format' : 'json'}", "{'success': '1'}", None), (3, 'http://api.k780.com', "{'app' : 'weather.realtime','weaid' : 'a','appkey' : '54744','sign' : '71cf771fcd16ff00f58f03cda86eeb52','format' : 'json'}", "{'success': '1'}", None), (4, 'http://api.k780.com', "{'app' : 'weather.realtime','weaid' : '1','appkey' : '54744','sign' : '71cf771fcd16ff00f58f03cda86eeb52','format' : 'json'}", "{'success': '1'}", None)]
csv文件操作
import csv
# csv.reader() 返回的是一个csv.reader的对象,可迭代的对象
f = open('./data/data.csv', 'r', encoding='utf-8')
with open('./data/data.csv', 'r', encoding='utf-8') as f:
a = csv.reader(f)
# 某一行的数据 转成list
result = list(a)
print(result)
# 指定某一行
print(result[1])