Python学习随笔
1.自然排序算法:natsort模块,对相似文件名排序非常有效
In [1]: from natsort import natsorted
In [2]: s = ["image10","image20","image1","image2","image3"]
In [3]: natsorted(s)
Out[3]: ['image1', 'image2', 'image3', 'image10', 'image20']
2.巧妙使用format函数进行进制转换(b,o,d,x),某些情况下使用更Pythonic
In [1]: "{:08b}".format(254)
Out[1]: '11111110'
In [2]: "{:08o}".format(254)
Out[2]: '00000376'
In [3]: "{:04X}".format(254)
Out[3]: '00FE'
PS:将IP地址转换为十进制只需要用一行代码即可:int(''.join(["{:08b}".format(num) for num in map(int,ip.split('.'))]),2)
也可以用f''这样的形式进行转换,如:
In [1]: f'{254:08b}'
Out[1]: '11111110'
In [2]: f'{254:08o}'
Out[2]: '00000376'
In [3]: f'{254:04X}'
Out[3]: '00FE'
将IP地址转换为十进制
int(''.join([f"{num:08b}" for num in map(int,ip.split('.'))]),2)
3.str模块的title函数与string模块的capwords函数
In [1]: import string
In [2]: S = "hello world"
In [3]: S.title()
Out[3]: 'Hello World'
In [4]: string.capwords(S)
Out[4]: 'Hello World'
4.使用glob模块进行文件搜索
In [1]: import glob
In [2]: glob.glob("*.py") #获取当前目录下的所有py文件,不搜索子目录
In [3]: glob.glob("D:\\**",recursive=True) #搜索D盘目录下所有文件
5.使用chardet检测字符编码
import chardet
def get_file_context(file):
#读取文本
with open(file,'rb') as fp:
scline = fp.read()
encoding = chardet.detect(scline)['encoding']
return scline.decode(encoding)
6.获取当前文件所在目录:
dirname = os.path.dirname(__file__) #当前文件所在目录
work_dir = os.getcwd() #当前进程所在工作目录
7.requests库的get与post函数
get(url, params=None, **kwargs)
Sends a GET request.
:param url: URL for the new :class:`Request` object.
:param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:return: :class:`Response <Response>` object
:rtype: requests.Response
post(url, data=None, json=None, **kwargs)
Sends a POST request.
:param url: URL for the new :class:`Request` object.
:param data: (optional) Dictionary (will be form-encoded), bytes, or file-like object to send in the body of the :class:`Request`.
:param json: (optional) json data to send in the body of the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:return: :class:`Response <Response>` object
:rtype: requests.Response
Response.status_code:响应状态码
Response.raw:原始响应体,使用r.raw.read()读取
Response.content:字节方式的响应体,需要进行解码
Response.text:字符串方式的响应体,会自动更具响应头部的字符编码进行解码
Response.headers:以字典对象储存服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在,则返回None
Response.json():request中内置的json解码器
Response.raise_for_status():请求失败(非200响应),抛出异常
Response.url:获取请求的url
Response.cookies:获取请求后的cookies
Response.encoding:获取编码格式
8.requests库的get函数关于params的用法
params = {'wd':'python',}
url = 'https://www.baidu.com/s'
Response = requests.get(url,params = params)
非常非常的简单,请求的url是这样的
In [5]: Response.url
Out[5]: 'https://www.baidu.com/s?wd=python'
PS:如果不需要提交数据,直接使用get函数来请求。
9.requests库的post函数的用法:
在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json。
data与json既可以是str类型,也可以是dict类型。
区别:
1、不管json是str还是dict,如果不指定headers中的content-type,默认为application/json
2、data为dict时,如果不指定content-type,默认为application/x-www-form-urlencoded,相当于普通form表单提交的形式
3、data为str时,如果不指定content-type,默认为application/json
4、用data参数提交数据时,request.body的内容则为a=1&b=2的这种形式,用json参数提交数据时,request.body的内容则为'{"a": 1, "b": 2}'的这种形式
PS:有遇到过post请求也可以使用params参数,并且正常返回结果
如果指定传递json参数,则'Content-Type':'application/json; charset=UTF-8' ,不再需要指定,已默认未application/json
文件上传方式例举:
files={'file':(image_file,open(image_file,'rb'),'image/png'),}
requests.post(url,headers = headers,files=files)
10.如何将010203040506070809 分割为 '01 02 03 04 05 06 07 08 09'?
import textwrap
In [4]: ' '.join(textwrap.wrap(text ='010203040506070809',width = 2))
Out[4]: '01 02 03 04 05 06 07 08 09'
如果调用re模块
In [1]: s = '010203040506070809'
In [2]: import re
In [3]: reg = re.compile('.{1,2}')
In [4]: ' '.join(reg.findall(s))
Out[4]: '01 02 03 04 05 06 07 08 09'
11.json文件的读取
import json
with open('res.json','r',encoding = "utf-8") as json_file:
dict_data = json.load(json_file)
12.json文件的写入
import json
with open('res.json','w',encoding = 'utf-8') as fp:
json.dump(dict_data,fp,ensure_ascii = False)
13.yaml文件的读取
import yaml
with open('result.yaml','r',encoding = 'utf-8') as fp:
yaml_data = yaml.load(fp)
14.yaml文件的写入
import yaml
with open("result.yaml",'w',encoding = 'utf-8') as fp:
yaml.dump(yaml_data,fp,allow_unicode = True)
15.Python 3不再需要直接使用OrderedDict:
In [1]: {str(i):i for i in range(5)}
Out[1]: {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4}
16.使用_分割数字,更直观。
In [1]: num = 100_000_000_000_000
In [2]: num
Out[2]: 100000000000000
In [3]: hex_num = 0x1234_ABCD
In [4]: hex_num
Out[4]: 305441741
In [5]: bin_num = 0b111_0011_0010
In [6]: bin_num
Out[6]: 1842
In [7]: f'{100000000000:_}'
Out[7]: '100_000_000_000'
17.获取当前平台信息。
In [1]: import platform
In [2]: platform.system()
Out[2]: 'Windows'
18.binascii模块
binascii模块包含很多在二进制和 ASCII 编码的二进制表示之间的转换方法。
In [1]: import binascii
In [2]: a = b'123456abc'
In [3]: b = binascii.hexlify(a)
In [4]: b
Out[4]: b'313233343536616263'
In [5]: binascii.a2b_hex(b)
Out[5]: b'123456abc'
文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq523176585/article/details/109508020
- 点赞
- 收藏
- 关注作者
评论(0)