Python相关的地址
- python官方插件地址 https://www.python.org/
- python官方文档 https://docs.python.org/zh-cn/3/
- logging日志相关 https://docs.python.org/zh-cn/3/howto/logging.html?highlight=%E6%97%A5%E5%BF%97
更改显示的日志格式 https://docs.python.org/zh-cn/3/library/logging.html#logrecord-attributes - pytest官方地址 https://docs.pytest.org/en/7.0.x/
- requests官方地址 https://docs.python-requests.org/zh_CN/latest/
知识点相关
python连接字符串的几种方式
# 方法一,直接通过 + 号直接连接 不推荐,因为python是弱类型语言,没法判断连接的是不是字符串
website = 'python' + 'tab' + '.com'
# 方法二,join方法,对list的字符进行连接的时候,这种方法必须是首选
listStr = ['python', 'tab', '.com']
website = ''.join(listStr)
# 方法三,替换
website = '%s%s%s' % ('python', 'tab', '.com')
# 方法四,两种f替换
a = 'asdf'
print(f'a的内容是: {a}')
这种方法的缺点,如果a中含有转义字符,则会将转义字符进行展示
name = 'Alice'
age = 25
message = "My name is {} and I am {} years old.".format(name, age)
指定变量的位置:
name = 'Bob'
age = 30
message = "My name is {1} and I am {0} years old.".format(age, name)
格式化数字:
pi = 3.1415926
result = "The value of pi is {:.2f}".format(pi)
print(result)
# 输出:The value of pi is 3.14
字符串前加 r’‘, b’‘, u’‘, f’’ 的含义
# r"" 的作用是去除转义字符.如果是“\n”那么表示一个反斜杠字符,一个字母n,而不是表示换行了。
str= r'input\n'
print(str) ---- > input\n
# 以 f开头表示在字符串内支持大括号内的python 表达式
import time
t0 = time.time()
time.sleep(1)
name = 'processing'
print(f'{name} done in {time.time() - t0:.2f} s')
# b'' 表示这是一个 bytes 对象 网络编程中,服务器和浏览器只认bytes 类型数据
如:send 函数的参数和 recv 函数的返回值都是 bytes 类型
# 在 Python3 中,bytes 和 str 的互相转换方式是
str.encode('utf-8')
bytes.decode('utf-8')
# u"我是含有中文字符组成的字符串。"
后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。
读取、写入txt文本内容
python常用的读取文件函数有三种read()、readline()、readlines()
read() 一次性读全部内容:一次性读取文本中全部的内容,以字符串的形式返回结果
readline() 读取第一行内容:只读取文本第一行的内容,以字符串的形式返回结果
readlines() 列表:读取文本所有内容,并且以数列的格式返回结果,一般配合for in使用
with open("test.txt", "r") as f:
for line in f.readlines():
line = line.strip('\n') #去掉列表中每一个元素的换行符
print(line)
写入txt文本
with open("test.txt","w") as f:
f.write("这是个测试!") # 自带文件关闭功能,不需要再写f.close()
读写模式
要了解文件读写模式,需要了解几种模式的区别,以及对应指针
r : 读取文件,若文件不存在则会报错
w: 写入文件,若文件不存在则会先创建再写入,会覆盖原文件
a : 写入文件,若文件不存在则会先创建再写入,但不会覆盖原文件,而是追加在文件末尾
rb,wb: 分别与r,w类似,但是用于读写二进制文件
r+ : 可读、可写,文件不存在也会报错,写操作时会覆盖
w+ : 可读,可写,文件不存在先创建,会覆盖
a+ : 可读、可写,文件不存在先创建,不会覆盖,追加在末尾
使用a+时,需要注意:在Python中读取文本使用a+模式打开文本文件,f=open(‘//test’,‘a+’),直接读取文件f.read()返回的数据为空,是因为read方法取到的是光标之后的数据,而a+是追加文本,光标默认在最后,所以取到的数为空,需要使用f.seek(0),将光标移动到下标为0的位置后,再使用f.read()方法就可以取到全部数据。
Request设置cookies
参开文档:https://www.cnblogs.com/ClownAlin/p/13092021.html
# 方法一:cookie是字典格式
import requests
cookies_value = {'name1': 'value1','name2': 'value2'}
response = requests.post(url=url, data=data, cookies=cookies_value)
# 方法二:cookies存放在headers中
header = {"cookie": "cookie_name=cookie_value;cookie_name=cookie_value"}
response = session.post(url=url, headers=header, params=param, data=data )
# 方法三点一:使用session,这种可以避免通过登录接口获取cookie
session = requests.session()
session.cookies['cookie_name'] = "cookies_value"
功能:可以添加cookie,不会清除原有的cookie
缺点:不能设置path,domain
使用:可以在登录时将验证码的Cookie添加进去
# 方法三点二
session = requests.session()
session.cookies.set('cookie_name', "cookie_value", path='/', domain='.abc.com')
功能:设置path、domain等参数
缺点:清除原来的cookies
# 方法三点三,和三点一相同,只不过是cookie的格式为字典
session = requests.session()
requests.utils.add_dict_to_cookiejar(session.cookies, cookie_dict)
功能:可以添加cookie,不会清除原有的cookie
缺点:不能设置path,domain等参数
# 方法三点四
session = requests.Session()
c = requests.cookies.RequestsCookieJar()
c.set('cookie_name', 'cookie_value') #path='/', domain='.abc.com'
session.cookies.update(c)
session.get(url='http://47.107.178.45/phpwind/')
cookie的path和domain属性
domain表示的是cookie所在的域,默认为请求的地址,如网址为www.test.com/test/test.aspx,那么domain默认为www.test.com。而跨域访问,如域A为t1.test.com,域B为t2.test.com,那么在域A生产一个域A和域B都能访问的cookie将要将该cookie的domain设置为.test.com;如果要在域A生产一个令域A不能访问而域B能访问的cookie就要将该cookie的domain设置为t2.test.com。
path表示cookie所在的目录,asp.net默认为/,就是根目录。在同一个服务器上有目录如下:/test/,/test/ccd/,/test/dd/,现设要给cookie1的path为/test,cookie2的path为/test/cd/,那么test下的所有页面都可以访问到cookie1,而/test/和/test/dd/的子页面不能访问cookie2。这是因为cookie能让其path路径下的页面访问。
浏览器会将domain和path都相同的cookie保存在一个文件里,cookie间用*隔开。含值键值对的cookie:以前一直用的是name=value单键值对的cookie,含多个子键值对的cookie格式是name=key1=value1&key2=value2。
遍历字典中所有的key和value值
a = {'a': '1', 'b': '2', 'c': '3'}
一、遍历字典中的key值
方式一:
for key in a:
print('key:' + key)
方式二:
for key in a.keys():
print('key:' + key)
二、遍历字典中的value值
方式一:
for value in a.values():
print(value)
方式二:
for key in a:
print(a[key])
三、遍历字典中的字典项
for kv in a.items():
print(kv)
四、遍历字典中key和value值
方式一:
for key in a:
print(key+':'+a[key])
方式二:
for key in a.keys():
print(key+':'+a[key])
方式三:
for key,value in a.items():
print(key+':'+value)
方式四:
for (key,value) in a.items():
print(key+':'+value)
格式化打印 Json
json = {
"type": "2",
"selectType": "3"
}
pprint.pprint(json)
request请求格式
request.get(url=url, params={'a':'b'},headers=headers,verify=False)
request.post(url=url, json=json,headers=headers,verify=False)
查看对象的内容地址
id()函数返回对象的“标识符”,这是一个整数,用于唯一标识对象。这个标识符通常是对象的内存地址,但在实践中,您不应该依赖于它的具体含义或行为。
a = 10
b = 20
c = a
print(id(a)) # 输出a的ID
print(id(b)) # 输出b的ID
print(id(c)) # 输出c的ID,它应该和a的ID相同,因为它们引用的是同一个对象
request上传文件
files = {'file': open(r'../data/rate-data.xlsx', 'rb')}
resp = session.post(
url=f'{domain}/source/upload-create', headers=headers, files=files)