引言
想學爬蟲還是 python 專業啊,之前一直在用 java, 現在決定嘗嘗鮮,使用 python及爬蟲框架來完成網絡數據采集。
編程語言之間都是相通的,比如都需要模塊化,引入其他文件來實現功能,使用列表等容器來處理數據,都要使用 json
或 xml
來解析和傳輸數據。
你會發現通過 類比 的方式,帶着問題去學習,你會發現走的很快
而且我認為代碼示例的作用是 異常強大的, 我會盡量使用代碼示例的方式來展示,以滿足同學快速學習的需要,也備后續查詢。
下面就是在 使用 python 過程中的問題總結,okay,讓我們一起來歷險吧~
String 有哪些有用的方法?
不管是哪種語言,用的最多的類型估計都是 string (字符串),要想快速入門 python, 掌握 string 也是必須的。
在 java 中使用最多的 string 功能,我也會帶着同樣的疑問來了解 python 該使用什么方法實現。如果這里沒有你要找的方法,可以到 python string 官方地址完整方法去查詢
如何拼接字符串?
- 使用
+
號來拼接,要注意的是,當有數字的時候一定要轉化為字符串格式str(value)
才能夠相加,不然會報錯。 - 使用%進行拼接,和占位符的概念比較類似,這里舉個栗子
hour = 9
minutes = 45
print('it\'s %d:%d minutes!' %(hour, minutes))
如何分隔字符串?
# 對字符串分割
split_str = 'a-b-c-d'
print(split_str.split('-'))
如何獲取字符串長度
# 獲取字符串的長度
print(len('banana'))
如何將 list 拼接成字符串?
# 以 - 做間隔,拼接字符串
join_str_list = ['a', 'b', 'c', 'd']
print('-'.join(join_str_list)) # 這里就是用 - 拼接后的值
如何替換字符串?
str.replace(old, new[, count])
count
表示替換的次數,如果沒有指定,則只會替換第一個遇到的
如何去除字符串中的空格?
去除字符串中空格分為 3 種
- 去除兩端的空格
- 去除左邊的空格
- 去除右邊的空格
# 去除字符串中的空格
strToStrip = ' abc '
print(strToStrip.strip()) # 去除兩端空格
print(strToStrip.lstrip()) # 去除左邊空格
print(strToStrip.rstrip()) # 去除右邊空格
如何子字符串是否包含在父字符串中?
child_str = 'abc'
print('abcd'.find(child_str)) # 如果存在就返回首字母下標,不存在返回 -1
python 有哪些有用的容器?
學過 java 的都知道,在 java 中使用最多的容器有 List
, Map
, Set
, Array
,這些容器可以讓我們方便的存儲並操作數據,那么 python 中又有哪些類似的容器可供我們使用呢?
列表 list
python 中也有列表,功能包含了 java 列表,而且更牛的是它可以 包含不同類型的元素
。
['a', 10, 1.5] # 這就是一個列表,只需要方括號包起來即可
如何遍歷一個列表
有兩種方式可實現
- for 循環的方式,這當然是最常見的
list = ['a', 1, 1.4]
for item in list:
print(item)
在只需要讀取列表的元素本身時這種方式當然很優雅。但如果需要獲取元素的下標,就力不從心了,這就需要下面的方式。
- 使用內置函數 range 和 len, 操作元素下表
list = ['a', 1, 1.4]
for i in range(len(list)):
list[i] = list[i] * 2
print(list[i])
如何對列表切片?
pyton 中專門有切片操作符 :
, 想切多厚切多厚,這可比 java 要方便不少。
通過例子來感受下吧。
alpha_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(alpha_list[1:3]) # ['b', 'c']
print(alpha_list[:4]) # ['a', 'b', 'c', 'd']
print(alpha_list[2:]) # ['c', 'd', 'e', 'f', 'g']
print(alpha_list[:]) # ['a', 'b', 'c', 'd', 'e', 'f', 'g']
如何給列表添加元素?
有四種方式
- 在列表尾部添加元素
append(value)
- 將一個列表中的每個元素分別添加到另一個列表上
extend(list)
- 將一個元素插入到列表的指定位置
insert(index, value)
+
號,將兩個 list 直接相加, 會返回一個新的 list 對象
碼字太多了,自己都暈了,直接上代碼。
list1 = ['a', 'b', 'c', 'd']
list1.append('e')
print(list1) # ['a', 'b', 'c', 'd', 'e']
list2_1 = ['a', 'b', 'c', 'd']
list2_2 = ['e', 'f', 'g']
list2_1.extend(list2_2)
print(list2_1) # ['a', 'b', 'c', 'd', 'e', 'f', 'g']
list3 = ['a', 'c', 'd']
list3.insert(1, 'b') # ['a', 'b', 'c', 'd']
print(list3)
# 內存多余消耗,不推薦
list4_1 = ['a', 'b']
list4_2 = ['c', 'd']
print(list4_1 + list4_2) # ['a', 'b', 'c', 'd']
刪掉元素
也有幾種方法可實現
- 修改列表,彈出被刪除的值
pop(index)
- 知道要刪除的元素時
remove(value)
- 不需要使用刪除的值時
del(index)
- 刪除多個值
del(index_begin, index_end)
上代碼
remove_list_1 = ['a', 'b', 'c']
print(remove_list_1.pop(0))
print(remove_list_1)# ['b', 'c']
remove_list_2 = ['a', 'b', 'c']
del remove_list_2[1]
print(remove_list_2)# ['a', 'c']
remove_list_3 = ['a', 'b', 'c']
remove_list_3.remove('b')
print(remove_list_3) # ['a', 'c']
remove_list_4 = ['a', 'b', 'c']
del remove_list_4[1:2]
print(remove_list_4)# ['a', 'c']
字典 dict
dict 和 java 中 Map
非常類似,也是由 key
和 value
組成的,也是
使用 散列表 的算法存儲, 用過 java 的同學就直接把它當做 Java HashMap 來用就可以啦。另外,在語法上要比 java 也要簡潔不少。
創建 dict 添加元素
a_dict = dict() # 這樣就創建了一個空字典
a_dict['one'] = 1 # 塞進去一個元素
not_empty_dict = {'one': 1, 'two': 2, 'three': 3} # 這是一個包含數據的字典
遍歷 dict
使用 for
循環遍歷所有字典,可以遍歷字典中的 key,這樣的遍歷是沒有特定順序的,如果想按照順序遍歷需要使用內置函數 sorted
d = {'b': 2, 'a': 1, 'c': 3}
for item_key in d:
print(item_key, d[item_key])
for item_key in sorted(d):
print(item_key, d[item_key])
那我如果想要遍歷 dict 中的 values 呢?
還真有一個方法叫 values()
, 它會返回一個值集合,並可以應用 in
操作符遍歷
d = {'b': 2, 'a': 1, 'c': 3}
for value in d.values():
print(value)
for sorted_value in sorted(d.values()):
print(sorted_value)
元組
什么是元組? java 中可沒有聽過內置元組這樣的數據結構。
在前面已經講了列表,知道一個列表可以存儲多個數據結構。元組和列表很像,但要記住它們間的一個重要區別: 元組是不可變的。
如何創建元組?
- 把各個類型的元素用逗號分隔,就可以得到一個元組,為了好看,常常用括號再圍起來
- 使用內置函數
tuple()
也可以創建元組
注意,由於元組是不可變的,無法修改它的元素。但我們可以使用將多個元組結合成一個新的元組。(元組也支持 +
)
tuple_a = 1, 2, 3, 4, 5
tuple_b = (1, 2, 3, 4, 5)
# tuple 內置函數的參數必須是一個序列
tupe_c = tuple('12345') # 字符串
tuple_e = tuple([1, 2, 3, 4, 5]) # 列表
tuple_f = tuple((1,2,3,4,5)) # 元組
tuple_d = tuple_a + tuple_b
print(tuple_d)
元組有什么用?
既然 python 中有這么個數據結構,自然就有它的用武之地。還別說,它的用途還真不少。
- 交換變量 和 對多個變量賦值 更方便,優雅了
a = 5
b = 4
a,b = b,a
# 等式左邊是一個變量的元組
# 等式右邊是表達式的元組,可以是(字符串,列表,元組都行)
c,d = (1,2), [1,2,3]
print(c)
print(d)
- 可以在函數中返回多個值,將它們裝到元組里就行
def min_max(list):
return min(list), max(list)
num_list = [3, 1, 5, 2]
print(min_max(num_list))
其他
上面講述的都是一些大的主題,除了這些,還有一些相對小些的。
雖然小,但也很重要。這些小且重要的部分都在這個部分存放吧。
全局變量是如何處理的?
我們知道 java 中由於變量類型的存在,可以在一個 class
內聲明全局變量,從而在 class 的各個方法中讀取和賦值。
而這點在 python 中卻是行不通的,因為 python 中沒有變量類型, 如果在文件中聲明一個全局變量,再在函數內對這個變量賦值,會直接導致錯誤產生。這是因為在函數內又重新創建了一個局部變量。讀取全局變量也有這個問題。
那該怎么辦呢?嗯~o( ̄▽ ̄)o global
關鍵字就要登場了。
在函數內部,使用全局變量前,先用 global
關鍵字聲明下這個變量,表示這個變量是全局變量,后面再使用就 okay啦。
上栗子...
g_variable = 3
def test_g_variable():
global g_variable
print(g_variable) # 3
g_variable = 2
print(g_variable) # 2
test_g_variable()
結語
上面並沒有把 python 講完,還有 類和對象,文件,JSON處理, 網絡 等重要主題,這些會在下篇文章中涉及,敬請期待。