Python学习随笔

网友投稿 585 2022-05-29

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 ` 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 ` 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

Python学习随笔

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'

JSON Python

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:nginx--基于crond定时服务 + logrotate实现nginx日志自动清理及备份
下一篇:linux cat命令
相关文章