Python学习随笔

举报
悦来客栈的老板 发表于 2020/12/29 00:41:52 2020/12/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', '...

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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。