1. Python中使用remove命令导致的问题:

    1
    2
    3
    4
    5
    6
    # wrong code example:
    list_a=[1,2,3,4,5,6]
    list_b=[1,2,4]
    for i in list_a:
       if i not in list_b:
           list_a.remove(i)

    上述代码的目的是为了将list_alist_b做交集,并取list_a的交集部分。但是由于python中remove函数会导致列表结构的索引会少于原始列表,并导致无法完全遍历整个列表,最终出现上述结果为list_a=[1,2,4,6]

    下面演示正确代码:

    1
    2
    3
    4
    5
    6
    # Correct code example:
    list_a=[1,2,3,4,5,6]
    list_b=[1,2,4]
    for i in list_a[::-1]:
       if i not in list_b:
           list_a.remove(i)

    通过将list_a反序遍历,即可避免remove函数导致的索引缺失问题。关键方法:[::-1]

  2. Python中时间模块的使用方法

    1
    2
    3
    4
    5
    6
    7
    8
    import time
    time.localtime(time.time())
    '''
    作用是格式化时间戳为本地的时间。
    输出结果为time.struct_time(tm_year=2020, tm_mon=8, tm_mday=17, tm_hour=14, tm_min=22, tm_sec=39, tm_wday=0, tm_yday=200, tm_isdst=0)
    '''
    #使用time.strftime()进行格式化
    date=time.strftime('%Y-%m-%d',time.localtime(time.time()))

    通过上述方法,可以得到参数date为'2020-8-17'。对于创建csv文件或文件夹时,可以加入其中作为标签。非常实用!

  3. Python中pathlib模块使用,用于对路径进行分段:

    1
    2
    3
    4
    5
    6
    7
    8
    import pathlib

    now_path = pathlib.Path.cwd() / "demo.txt"
    print("name",now_path.name)
    print("stem",now_path.stem)
    print("suffix",now_path.suffix)
    print("parent",now_path.parent)
    print("anchor",now_path.anchor)

    输出结果:

    1
    2
    3
    4
    5
    name demo.txt
    stem demo
    suffix .txt
    parent /Users/chennan/pythonproject/demo
    anchor /
  4. pathlib中使用Path.iterdir(path_name)获得path_name下所有文件或文件夹名称的列表时,需要使用list(Path.iterdir(path_name))方法,才能与过去os.listdir(path_name)一致

  5. Python中利用strip函数可以去除字符串首尾特定的字符,且即使没有相应的字符,也不会报错

  6. argskwargs是python中的可变参数:args表示任意多个无名参数,返回一个tuple;kwargs表示关键字参数,返回一个dict。

    其实并不是必须写成*args**kwargs。 只有变量前面的 *(星号)才是必须的. 你也可以写成*var**vars. 而写成*args**kwargs只是一个通俗的命名约定。

    同时使用args和kwargs时,args参数必须在kwargs参数之前,像foo(a = 1, b = '2', c = 3, 'a', 1, None)这样的调用,会提示语法错误“SyntaxError: non-keyword arg after keyword arg”

    用法演示:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #输入
    def test(a, *args, **kwargs):
    print(a)
    print(args)
    print(kwargs)

    test(1, 2, 3, d = '4', e = 5)

    #输出
    1
    (2, 3)
    {'d': '4', 'e': 5}

    **kwargs的巧妙用法(python自带的dict就是利用kwargs创造字典):

  7. Python中确认两个list中元素是否完全一致,可以通过sorted排序后,进行全等比较。不能用sort方法,因为sort无返回值,而sorted会返回列表

    1
    2
    3
    4
    5
    6
    a=['a','b','c']
    b=['c','a','b']
    if a.sort()==b.sort():
    print('列表a和列表b中元素完全一致')
    else:
    print('列表a和列表b中元素存在差异')
  8. Python 进度条模块tqdm在windows环境下为了使进度条美观的只在一行呈现,可增加ncols参数:

    1
    2
    for i in tqdm(range(100),ncols=80)
    j = i*i
  9. 使用pyinstaller打包python脚本时,可通过–exclude-module=pandas方法去除不需要的模块,从而缩小成品软件体积。

    1
    pyinstaller --exclude-module=pandas --exclude-module=numpy --exclude-module=PIL --exclude-modulue=lxml belle.py
  10. List可以用index()函数确认其中某个元素在list中的位置信息。listname.index(str,start,end)

  11. Python爬虫遇到\xa0时,可通过输出字符串=””.join(输入字符串.split())获取

  12. Python中函数参数中的冒号是参数的类型建议符

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/usr/bin/python3
    # -*- coding:utf-8 -*-

    def twoSum(num1: int, num2: int=100) -> int:
    sum = num1 + num2
    return sum

    if __name__ == "__main__":
    print(twoSum.__annotations__)
    print(twoSum(1,2))
    print(twoSum(1))
    print(twoSum('I love ','Arsenal'))
    #print(twoSum('Arsenal'))
    1
    2
    3
    4
    {'num1': <class 'int'>, 'num2': <class 'int'>, 'return': <class 'int'>}
    3
    101
    I love Arsenal
  13. Python中判断数据类型的方式:

    1
    2
    3
    4
    # 判断输入的item是否是字符串类型
    if isinstance(item,str):
    ……
    ……
  14. Python中将字符串编码转化为 %xx 的形式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from urllib.parse import quote
    """特殊符号:汉字、&、=等特殊符号编码为%xx """
    KEYWORD = '苹果'
    url = 'https://s.taobao.com/search?q=' + quote(KEYWORD)
    print(url)
    # 运行结果:https://s.taobao.com/search?q=%E8%8B%B9%E6%9E%9C

    KEYWORD = '='
    url = 'https://s.taobao.com/search?q=' + quote(KEYWORD)
    print(url)
    # 运行结果:https://s.taobao.com/search?q=%3D
  15. Python中将字典参数编码为URL查询字符串,即转换成以 key1=value1&key2=value2 的形式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    from urllib.parse import urlencode
    base_url = "https://m.weibo.cn/api/container/getIndex?"
    params1 = {"value": "english", "page": 1}
    url1 = base_url + urlencode(params1)

    print(urlencode(params1))
    # value=english&page=1
    print(url1)
    # https://m.weibo.cn/api/container/getIndex?value=english&page=1
  16. Python中列表查重方法

    1
    2
    3
    4
    5
    from collections import Counter #引入Counter
    a = [29,36,57,12,79,43,23,56,28,11,14,15,16,37,24,35,17,24,33,15,39,46,52,13]
    b = dict(Counter(a))
    print ([key for key,value in b.items()if value > 1]) #只展示重复元素
    print ({key:value for key,value in b.items()if value > 1}) #展现重复元素和重复次数
  17. Python正则匹配中的贪婪及非贪婪模式
    {X,Y}为贪婪模式匹配

    贪婪模式,总是尝试匹配尽可能多的字符;

    非贪婪模式则相反,总是尝试匹配尽可能少的字符。

  18. Pythonreplace方法细节注意:
    字符串是不可以修改的类型,使用replace方法并不能修改原始的字符串,举例如下

    1
    2
    3
    4
    5
    6
    # 输入代码
    str= "abcdef"
    print(str.replace("abc",'AAA'))
    print((str))
    print(id(str))
    print(id(str.replace("abc",'AAA')))
    1
    2
    3
    4
    5
    输出结果:
    AAAdef
    abcdef
    10515104
    12049600

    如果你想要通过str的引用得到修改后的值,那么,将str这个变量指向修改后的内存地址即可

    str=str.replace(”abc”,”AAA”)