Pythonic騷操作知識點總結(持續更新)

1.urlencode

urlencode的參數是詞典,它可以將key-value這樣的鍵值對轉換成我們想要的格式。python2中:urlencode在urllib.urlencode
python3中:urlencode在urllib.parse.urlencode
urlencode用於需要轉換爲unicode編碼的情況;

params = {
        "q": "mac",
        "perPageSize": 1
  }
query_str = urllib.parse.urlencode(params)
#輸出的結果爲
q=mac&perPageSize=1

2.根據url和params格式化爲url

urlencode用於需要轉換爲unicode編碼的情況;

def format_url(url, params: dict=None) -> str:
    query_str = urllib.parse.urlencode(params)
    return f'{ url }?{ query_str }

如果不需要轉換編碼,保持原來格式就可以,則可以用:

def get_full_url(self,url, uri: dict) -> str:
        return url + '?' + '&'.join([str(key) + '=' + str(value) for key, value in uri.items()])

3.解碼和編碼

通過quote實現編碼,通過unquote來實現解碼

urllib.parse.quote("豆漿機")
urllib.parse.unquote("豆漿機")

4.將列表轉換爲字典(將對應的列表的值作爲鍵組成字典)

brands_name = ['jiuyang','iphone']
brands_value = dict.fromkeys(brands_name, '1')

5.通過zip來實現並行遍歷

list(zip(L1,L2))
--------------
for (x,y) in zip(L1,L2):
	print(x,y,'---',x+y)
--------------
brands = []
        for brand_name, brand_url in zip(brands_name, brands_url):
            brand = {}
            brand['brand_name'] = brand_name
            brand['brand_url'] = brand_url
            brands.append(brand)	

6.創建一個指定長度的,值爲1的列表

[1] * 10

7.儘量不要直接import一個模塊

而要通過from…import語句來引用,from parsers.common import Source 會好一些,在更清晰的同時避免common中的變量污染了當前的命名空間

8.字典取數據的用法

通常字典取數據時用get的方法來取,但是比並不是都是按get取就比較好。
通常,使用get來取外部不確定的數據,直接使用中括號取確定的數據,爲了避免異常,而自己未知

9.判斷None的寫法

python裏面判斷None,使用if not self.keyword 就行,這樣比較pythonic

10.將url分解爲字典參數串的方法

def get_url_query_dict(url) -> dict:
    url_parse = urlparse(url)
    query_str = url_parse.query
    if query_str is not '':
        return {param.split('=')[0]: param.split('=')[1] for param in query_str.split('&')}

11.使用f-strings來進行格式化操作

f'https://search.jd.com/Search?keyword={self.keyword_encode}&enc=utf-8&page=1'

f-strings的詳細介紹

12.字符串與json格式的轉換

字符串與json格式轉換

13.使用update對列表中的字典元素添加元素

goods = [{'a':1,'b':2,'c':3},{'a':4,'b':5,'c':6}]
[i.update({'d':11,'e':12}) for i in goods]

14. 創建所有值都相同的字典

dict.fromkeys(['a','b'],0)

15. list轉換爲字符串

"".join(list)

16.str轉換爲list

name_list.split('\n')

17.print輸出變量控制

#30 表示30位,.6表示小數點6位數
print('Add  {:30} with p-value {:.6}'.format(best_feature, best_pval))

18.倒敘騷寫法:

lis = [1,2,3,4,5,6]
for i in range(len(lis), 0, -1):
    print(i)

19.字典賦值

字典索引賦值

import numpy as np
dicttest = {}
for i in range(1,3):
    dicttest[i] = np.zeros((6,))
#得到的結果爲
{1: array([0., 0., 0., 0., 0., 0.]), 2: array([0., 0., 0., 0., 0., 0.])}

20.對列表中的數值進行排序

nums = [1123,12,4,56,3]
# 從小到大進行排序
nums.sort()
# 從大到小進行排序
nums.sort(reverse = True)
# 對列表中的值進行反轉
nums.reverse()

21.對“””字符串文本進行格式化

str = 'python'
print("""讓業務
系統%s用
起來
更快
""" % str)

22.對列表中的字典進行排序

infos = [{"name":"laowang","age":10},{"name":"xiaoming","age":20},{"name":"banzheng","age":30}]
# 冒號後面的相當於是返回的值
# 對於匿名函數的理解,將第一個x看作是輸入的值,而第二個看作是輸出
infos.sort(key = lambda x : x['name'])
print(infos)

23.判斷文件夾是否存在,不存在即創建

dirs = './TM/'
if not os.path.exists(dirs):
    os.mkdir(dirs)

24.Python保存圖片文件及檢查圖片文件寫入成功

Python保存圖片文件及檢查圖片文件寫入成功

25.使用ipdb進行單步調試

import ipdb
ipdb.set_trace()

26.urljoin的使用

urljoin適用於拼接相對url地址的連接上

27. 列表生成式

在遇到先初始化空列表,再append值的這種情況,通常用列表生成式能同樣解決!

28. Python合併列表的列表

方法一:
list = [['aa', 'bb'], ['cc', 'dd']] 
print ([j for i in list for j in i])
------------------------
['aa', 'bb', 'cc', 'dd']
方法二:
print (sum(list,[]))    
------------------------            
['aa', 'bb', 'cc', 'dd']
方法三:
["".join(i) for i in list]

29. Python合併列表的字符串

list = ['a','b','c']
"".join(list)

30. 列表去掉最後一個元素

list = [1,2,3,4,5,6]
a = list[:-1]

31.python去除字符串中間空格的方法

1、使用字符串函數replace


a = 'hello world'
a.replace(' ', '')
'helloworld'

2、使用字符串函數split

a = ''.join(a.split())

print(a)
helloworld

32.字符串String去除換行符和空格(\n,\r)

data = data.replace('\n','').replace('\t','')

33.合併字典

  1. 藉助dict(d1.items() + d2.items())的方法
  2. 藉助字典的update()方法
  3. 藉助字典的dict(d1, **d2)方法

34.將兩個list拼接成字典

keys = ['a', 'b', 'c']
values = [1, 2, 3]
dictionary = dict(zip(keys, values))
print dictionary

"""
輸出:
{'a': 1, 'c': 3, 'b': 2}
"""

35.去掉列表中的空格及\n

params_basic = [param.strip() for param in params_basic_raw]
params_basic = list(filter(lambda a: a != '', params_basic))

36.字典的提取key,value,並使其對應

replace_dict = {'\\x3C': '<','\\x5C': '\\','\\x2F': '/','\\x22': '"','\\x3E': '>'}
# 遍歷字典相當於是遍歷字典的鍵
for replace_key in replace_dict:
	resp_text = resp_text.replace(replace_key, replace_dict[replace_key])

37.變量命名注意規範,如果用於全局就用大寫,單詞之間分隔用下劃線’_’

38. set的用法

如果不用set,之前是這樣:

if jd_goods_parameter.get('認證型號') == '認證型號' or \
       jd_goods_parameter.get('認證型號') == '|' or \
       jd_goods_parameter.get('認證型號') == '.' or \

用set,直接用in判斷更簡潔,且效率更高:

if jd_goods_parameter.get('認證型號') in set(['|','.','-','..']):
	print('|' in x)

39.同一個變量如果是多次調用,則可以使其變爲類變量來使用,而不用實例變量;

40.去掉所有的空值

params_basic = [x for x in params_basic if x != '']

41.生成器表達式讀取大規模文件

def myreadlines(f, newline):
  # 定義緩存
  buf = ""
  while True:
    while newline in buf:
      pos = buf.index(newline)
      yield buf[:pos]
      buf = buf[pos + len(newline):]
    chunk = f.read(4096)

    if not chunk:
      #說明已經讀到了文件結尾
      yield buf
      break
    buf += chunk

with open("input.txt") as f:
    for line in myreadlines(f, "{|}"):
        print (line)

42.遍歷列表的值時用複製,而不要用原值

使用 [row[:] for row in list2d] ,而不要用:[row for row in list2d]

因爲list2d是一個外面的用戶傳來的引用。如果直接使用list2d,
而不進行復制的話,外面的用戶如果修改這個list2d,將直接改變我們的矩陣中的數據:

比如,

A = [[1, 2], [3, 4]] # 聲明一個二維列表
M = Matrix(A)        # 用這個二維列表實例化一個矩陣類
print(M)             # 可以打印M看一看:)
 
A[0][0] = 666 # 可能由於某種原因,對於二維列表中的值進行了修改
              # 但注意,此時我們沒有對M做修改
print(M)      # 你會發現,M也變了,這不是我們想要的結果

而當我們換回 self._values = [row[:] for row in list2d],此時,M就不會隨着外部的改變而改變了。

43.python2強制轉換py3的輸出

首先我們需要明白該句語句是python2的概念,那麼python3對於python2就是future了,也就是說,在python2的環境下,超前使用python3的print函數。
相當於把下一個新版本的新特性導入到當前版本

from __future__ import print_function

44.maketrans()方法實現要轉換的映射:

通過str.maketrans()方法先實現轉換,再通過translate方法對原字符串進行替換

def replace(text):
	intab = ",?!"
	outtab = ",?!"    
	deltab = ")(+_-.>< "
	trantab=text.maketrans(intab, outtab,deltab)
	return text.translate(trantab)

Python中的maketrans() 方法用於創建字符映射的轉換表,對於接受兩個參數的最簡單的調用方式,
maketrans(intab, outtab, delchars)
第一個參數表示需要轉換的字符,屬於字符串類型;
第二個參數表示轉換的目標,也屬於字符串類型;
第三個參數是可選參數delchars,可選參數,表示要刪除的字符組成的字符串
注:兩個字符串的長度必須相同,爲一一對應的關係。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章