Python模組之NumPy
1 多維陣列adarray
程式示例:
b = np.zeros((2, 3, 5))
print(b)
print(b.ndim)
print(b.size)
print(b.shape)
執行結果:
[[[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
[[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]]
3
30
(2, 3, 5)
結果解釋:
NumPy中的多維陣列稱為ndarray。其中:
- ndim表示多維陣列有幾個維度。(程式示例中b有三個維度,每個維度的長分別為2、3、5)
- size是多維陣列的長度,即陣列中總共有多少個元素。(程式示例中b共有30個元素)
- shape是多維陣列的型(即表示陣列的形狀),表示了陣列的維數和每一維的元素的數量。(程式示例中b共有三個維度,這三個維度中元素個數分別為2個、3個、5個)
2 建立陣列
最常用的方法是使用array()函式,該函式只有一個唯一的引數,需要傳入一個陣列型別的物件。
我們可以傳入單層或多層列表,巢狀元組或元組列表,也可以是元組和列表組成的列表(或元組)。總之,傳入的物件是陣列型別即可。(Python的陣列型別有列表List、元組Tuple、字典Dict、集合Set)
import numpy as np # 巢狀的列表 a = np.array([[1, 2, 3], [4, 5, 6]]) print(a) # 巢狀的元組 b = np.array(((3, 2, 1), (6, 5, 4))) print(b) # 元組和列表組成的列表 c = np.array([(1, 2, 3), [4, 5, 6], (7, 8, 9)]) print(c) # 元組和列表組成的元組 d = np.array(([3, 2, 1], (6, 5, 4), [9, 8, 7])) print(d)
執行結果:
[[1 2 3]
[4 5 6]]
[[3 2 1]
[6 5 4]]
[[1 2 3]
[4 5 6]
[7 8 9]]
[[3 2 1]
[6 5 4]
[9 8 7]]
指定陣列中的元素型別,可以設定array()的dtype引數,例如:
程式程式碼:
a = np.array([[1,2],[3,4]],dtype = 'D')
a
執行結果:
array([[1.+0.j, 2.+0.j],
[3.+0.j, 4.+0.j]])
3 資料型別
NumPy陣列能夠包含多種資料型別。
3.1 NumPy中的資料型別
- NumPy包含的數值型別就有:
- 除了數值型別外,NumPy還支援一些其他型別,例如字串等。
3.2 資料型別物件
資料型別物件是numpy.dtype類的例項。
函式array()、arange()都有引數dtype,可以通過設定dtype引數,設定各元素的資料型別。
程式程式碼:
import numpy as np
a1 = np.array((2,3))
print('a1 = ', a1)
a2 = np.array((2,3),dtype='f')#浮點型
print('a2 = ', a2)
b1 = np.arange(2,13,2)#間隔為2
print('b1 = ', b1)
b2 = np.arange(2,13,2,dtype='D') #複數型
print('b2 = ', b2)
執行結果:
a1 = [2 3]
a2 = [2. 3.]
b1 = [ 2 4 6 8 10 12]
b2 = [ 2.+0.j 4.+0.j 6.+0.j 8.+0.j 10.+0.j 12.+0.j]
3.3 自帶的陣列建立方法
- zeros()
def zeros(shape, dtype=None, order=‘C’):
Return a new array of given shape and type, filled with zeros.
Parameters
----------
shape : int or tuple of ints
Shape of the new array, e.g.,(2, 3)
or2
.
dtype : data-type, optional
The desired data-type for the array, e.g.,numpy.int8
. Default is
numpy.float64
.
order : {‘C’, ‘F’}, optional, default: ‘C’
Whether to store multi-dimensional data in row-major
(C-style) or column-major (Fortran-style) order in
memory.
Returns
-------
out : ndarray
Array of zeros with the given shape, dtype, and order.
- ones()
與zeros()用法相同,只是以0填充。
def ones(shape, dtype=None, order=‘C’):
Return a new array of given shape and type, filled with ones.
- arange()
arange([start,] stop[, step,], dtype=None)
Parameters
----------
start : number, optional
Start of interval. The interval includes this value. The default
start value is 0.
stop : number
End of interval. The interval does not include this value, except
in some cases wherestep
is not an integer and floating point
round-off affects the length ofout
.
step : number, optional
Spacing between values. For any outputout
, this is the distance
between two adjacent values,out[i+1] - out[i]
. The default
step size is 1. Ifstep
is specified as a position argument,
start
must also be given.
dtype : dtype
The type of the output array. Ifdtype
is not given, infer the data
type from the other input arguments.
Returns
-------
arange : ndarray
程式示例:
print(np.zeros((3,3)))
print()
print(np.ones((3,3),dtype='f'))
print()
print(np.arange(6))
print(np.arange(1,6))
print(np.arange(1,6,2))
執行結果;
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
[0 1 2 3 4 5]
[1 2 3 4 5]
[1 3 5]
- linspace()
.def linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None):
“”"
Return evenly spaced numbers over a specified interval.
Returnsnum
evenly spaced samples, calculated over the
interval [start
,stop
].
The endpoint of the interval can optionally be excluded.
Parameters
----------
start : scalar
The starting value of the sequence.
stop : scalar
The end value of the sequence, unlessendpoint
is set to False.
In that case, the sequence consists of all but the last ofnum + 1
evenly spaced samples, so thatstop
is excluded. Note that the step
size changes whenendpoint
is False.
num : int, optional
Number of samples to generate. Default is 50. Must be non-negative.
endpoint : bool, optional
If True,stop
is the last sample. Otherwise, it is not included.
Default is True.
retstep : bool, optional
If True, return (samples
,step
), wherestep
is the spacing
between samples.
dtype : dtype, optional
The type of the output array. Ifdtype
is not given, infer the data
type from the other input arguments.
… versionadded:: 1.9.0
Returns
-------
samples : ndarray
There arenum
equally spaced samples in the closed interval
[start, stop]
or the half-open interval[start, stop)
(depending on whetherendpoint
is True or False).
step : float, optional
Only returned ifretstep
is True
Size of spacing between samples.
linspace,預設使用起始閉區間[start,end]。
引數num表示預設劃分成50份。
引數endpoint為True時,表示將端點end考慮在內。為False時,表示將端點end排除在外。
引數retstep為True時,表示返回生成陣列中各元素的間隔。為False時,不返回間隔。
程式示例:
print(np.linspace(2,8,num=4))
print(np.linspace(2,8,num=4,retstep=True))
執行結果:
[2. 4. 6. 8.]
(array([2., 4., 6., 8.]), 2.0)
3.4 基本運算
3.4.1 算術運算子
加(+)、減(-)、乘(*) 均為元素級,即兩個陣列進行這三種運算,是各對應位置的元素,進行這些運算。
3.4.2 矩陣積
NumPy中用dot()函式表示矩陣積。
dot(a, b, out=None)
程式示例:
import numpy as np
a = np.arange(1, 4)
print('a = ', a)
b = np.linspace(1, 3, 3)
print('b = ', b)
print(np.dot(a, b)) # 即1*1+2+2+3+3 = 14
print(a.dot(b))
print(np.dot(b,a)) # 注意:矩陣積的運算不遵循交換律,所以運算物件的順序很重要。此處的例子沒有顯示這一點,但還是要注意。
執行結果:
a = [1 2 3]
b = [1. 2. 3.]
14.0
14.0
14.0
3.4.3 自增和自減運算子
自增(+=)、自減( -=)。
程式示例:
a = np.arange(1, 4)
print('a = ', a)
b = np.linspace(1, 3, 3)
print('b = ', b)
print()
a += 1
print(a)
b -= 1
print(b)
執行結果:
a = [1 2 3]
b = [1. 2. 3.]
[2 3 4]
[0. 1. 2.]
3.4.4 通用函式
通用函式對輸入陣列的每個元素進行操作,生成的所有結果組成一個新的陣列,輸出陣列的size與輸入陣列相同。
sqrt()、log()、sin()。
3.4.5 聚合函式
聚合函式對一組值進行操作,返回一個單一值作為結果。
sum()、min()、max()、mean()、std()。
3.5 索引、切片和迭代
3.5.1 索引
包含兩種機制:正數索引(自左從0開始)、負數索引(自右從-1開始)。
一維陣列程式示例:
import numpy as np
a = np.arange(1, 6)
print('a = ', a)
print(a[0])
print(a[1]) # 正數索引
print(a[-1])
print(a[-2])
執行結果:
a = [1 2 3 4 5]
1
2
5
4
二維陣列程式示例:
b = np.arange(1,10).reshape((3,3))
print(b)
print(b[0][0])
print(b[1][1])
print(b[2][2])
執行結果:
[[1 2 3]
[4 5 6]
[7 8 9]]
1
5
9
3.5.2 切片
- 一維陣列的切片
程式示例:
import numpy as np
a = np.arange(0, 9)
print('a = ', a)
print('a[1:6] = ', a[1:6]) # 元素的起始索引,開區間
# 間隔抽取
print('a[1:6:2] = ', a[1:6:2]) # 在切片中,每兩個元素取一個,即每隔一個元素取一個
print()
# 間隔抽取預設值
print('a[0:6] = ', a[0:6])
print('a[:6:2] = ', a[:6:2]) # 第一個數字省略,切片預設從陣列最左側(索引為0)開始
print()
print('a[1:] = ', a[1:])
print('a[1::2] = ', a[1::2]) # 第二個數字省略,切片預設到陣列最右側結束
print()
print('a[1:6] = ', a[1:6])
print('a[1:6:] = ', a[1:6:]) # 最後一個省略,間隔預設取1
執行結果:
a = [0 1 2 3 4 5 6 7 8]
a[1:6] = [1 2 3 4 5]
a[1:6:2] = [1 3 5]
a[0:6] = [0 1 2 3 4 5]
a[:6:2] = [0 2 4]
a[1:] = [1 2 3 4 5 6 7 8]
a[1::2] = [1 3 5 7
a[1:6] = [1 2 3 4 5]
a[1:6:] = [1 2 3 4 5]
- 二維陣列的切片
程式示例:
import numpy as np
a = np.arange(1,10).reshape((3,3))
print(a, '\n')
print(a[:, 1], '\n') # 省略第一個,預設選擇所有行
print(a[1, :], '\n') # 省略第二個,預設選擇所有列
print(a[0:2, 1:3], '\n') # 0到1行,1到2列
print(a[[0, 2], 1:3]) # [0,2]用列表表示,選擇第0行和第2行;
執行結果
[[1 2 3]
[4 5 6]
[7 8 9]]
[2 5 8]
[4 5 6]
[[2 3]
[5 6]]
[[2 3]
[8 9]]
3.5.3 迭代
- 使用for迴圈遍歷陣列
程式示例:
import numpy as np
# 1 迭代一維陣列
a = np.arange(1, 6)
print(a, '\n')
for item in a:
print(item)
print()
# 2 迭代二維陣列
b = np.arange(1, 10).reshape((3, 3))
print(b, '\n')
print('2.1 以行為單位輸出:')
for row in b:
print(row)
print('2.2 使用巢狀迴圈遍歷每個元素:')
for row in b:
for item in row:
print(item)
print('2.3 通過一維迭代器flat遍歷陣列')
"""
ndarray.flat
A 1-D iterator over the array。(遍歷陣列的一維迭代器)
Return a copy of the array collapsed into one dimension.(flat是numpy.flatier的例項,將原陣列摺疊為一個一維陣列,然後返回。)
"""
for item in b.flat: # 將陣列b中的元素按順序組成一個一維陣列
print(item)
執行結果:
[1 2 3 4 5]
1
2
3
4
5
[[1 2 3]
[4 5 6]
[7 8 9]]
2.1 以行為單位輸出:
[1 2 3]
[4 5 6]
[7 8 9]
2.2 使用巢狀迴圈遍歷每個元素:
1
2
3
4
5
6
7
8
9
2.3 通過一維迭代器flat遍歷陣列
1
2
3
4
5
6
7
8
9
- NumPy方法apply_along_axis()
如果想用函式處理陣列的每一列或行(按整行或整列處理),可以使用優雅的NumPy方法apply_along_axis(),遍歷陣列。
程式示例:
import numpy as np
b = np.arange(1, 10).reshape((3, 3))
print(b, '\n')
# 聚合函式
print(np.apply_along_axis(np.mean, axis=0, arr=b)) # 對每一列求平均值
print(np.apply_along_axis(np.mean, 1, b)) # 對每一行求平均值
print()
def foo(x):
return x/2
print(np.apply_along_axis(foo, 1, b)) # 將每一行除以2
執行結果:
[[1 2 3]
[4 5 6]
[7 8 9]]
[4. 5. 6.]
[2. 5. 8.]
[[0.5 1. 1.5]
[2. 2.5 3. ]
[3.5 4. 4.5]]
3.6 處理陣列的形狀
- 拆解:ravel() —— 將多維陣列變成一維陣列,返回陣列的檢視。(不需傳入引數)
- 拉直:flatten() —— 將多維陣列變成一維陣列,返回真實的陣列,需要分配新的記憶體空間。(不需傳入引數)
- 轉置:transpose() 將陣列進行轉置。(不需傳入引數)
- 調整大小:
- resize()函式,不會返回新的陣列,會直接改變原陣列 。(需要傳入一個元組)
- reshape()函式,會返回新的陣列,不會改變原陣列。(需要傳入一個元組)
- shape屬性,直接改變原陣列。(需要用一個元組給其賦值)
3.6.1 堆疊陣列
- 水平疊加 hstack()函式
首先將待疊加的兩個陣列,組成一個元組,然後將整個元組作為引數傳入hstack()。
執行結果:import numpy as np a = np.ones(9).reshape(3, 3) print('a = ', a, '\n') b = np.arange(1, 10).reshape((3, 3)) print('b = ', b, '\n') print('水平疊加 = ', np.hstack((a, b)))
a = [[1. 1. 1.] [1. 1. 1.] [1. 1. 1.]] b = [[1 2 3] [4 5 6] [7 8 9]] 水平疊加 = [[1. 1. 1. 1. 2. 3.] [1. 1. 1. 4. 5. 6.] [1. 1. 1. 7. 8. 9.]]
- 垂直疊加 vstack()
- 深度疊加 dstack()
- 列式疊加 column_stack()
- 行式疊加 row_stack()
3.6.2 拆分NumPy陣列
- 橫向拆分 hsplit()
- 縱向拆分 vsplit()
import numpy as np
b = np.arange(1, 10).reshape((3, 3))
print('b = ', b, '\n')
print('橫向拆分 = ', np.hsplit(b, 3)) # 即豎著下刀,那麼刀的移動方向就是自左至右
print('hsplit等同於hsplit(axis = 1)',np.split(b,indices_or_sections=3,axis=1)) # split()第二個引數指示將陣列拆分為幾個子陣列;axis指示按哪個軸進行拆分
print('縱向拆分 = ', np.vsplit(b, 3))
執行結果:
b = [[1 2 3]
[4 5 6]
[7 8 9]]
橫向拆分 = [array([[1],
[4],
[7]]), array([[2],
[5],
[8]]), array([[3],
[6],
[9]])]
hsplit等同於hsplit(axis = 1) [array([[1],
[4],
[7]]), array([[2],
[5],
[8]]), array([[3],
[6],
[9]])]
縱向拆分 = [array([[1, 2, 3]]), array([[4, 5, 6]]), array([[7, 8, 9]])]
- 深向拆分 dsplit()
3.6.3 陣列的轉換
- tolist() 將陣列轉換成Python列表
- astype() 將陣列元素轉換成指定的型別
import numpy as np
b = np.arange(1, 10).reshape((3, 3))
print('b = ', b, '\n')
print('tolist(): ', b.tolist()) # 將陣列轉換為Python列表
print('astype(): ', b.astype('complex')) # 將陣列元素轉換成指定型別
執行結果:
b = [[1 2 3]
[4 5 6]
[7 8 9]]
tolist(): [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
astype(): [[1.+0.j 2.+0.j 3.+0.j]
[4.+0.j 5.+0.j 6.+0.j]
[7.+0.j 8.+0.j 9.+0.j]]
3.7 建立陣列的檢視和拷貝
- 拷貝 copy() 申請新的記憶體 返回的陣列與原陣列無關
- 檢視 view() 返回原陣列的檢視 修改檢視,也會修改原陣列
程式示例:
import numpy as np
b = np.arange(1, 10).reshape(3, 3)
print('b = ', b)
b_copy = b.copy()
print('b_copy = ', b_copy)
b_view = b.view()
print('b_view = ', b_view, '\n')
b.flat = 0
print('b = ', b)
print('b_copy = ', b_copy)
print('b_view = ', b_view)
執行結果:
b = [[1 2 3]
[4 5 6]
[7 8 9]]
b_copy = [[1 2 3]
[4 5 6]
[7 8 9]]
b_view = [[1 2 3]
[4 5 6]
[7 8 9]]
b = [[0 0 0]
[0 0 0]
[0 0 0]]
b_copy = [[1 2 3]
[4 5 6]
[7 8 9]]
b_view = [[0 0 0]
[0 0 0]
[0 0 0]]
3.8 常用概念
- 向量化:NumPy內部實現迴圈,使用者無需再實現。例如計算兩個陣列的乘積:A*B。(C語言中就只能用for迴圈計算了)
- 廣播機制:自動填充陣列,以完成陣列間的某些計算。
3.9 陣列資料檔案的讀寫
3.9.1 二進位制檔案的讀寫
程式示例:
import numpy as np
a = np.arange(16).reshape(4,4)
np.save('saved_data',a) # 儲存到saved_data.npy檔案中,副檔名.npy,擴充套件名系統會自動新增
print('a = ', a, '\n')
loaded_data = np.load('saved_data.npy') # 注意,在讀取檔案時需要自己加上副檔名
print('loaded_data = ', loaded_data)
執行結果:
a = [[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
loaded_data = [[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
3.9.2 讀取檔案中的列表形式資料
此處以讀取CSV檔案中資料為例,可以看出,檔案中有缺失資料:
#data.csv
id,value1,value2,value3
1,123,1.4,23
2,110,,18
3,,2.1,19
程式示例:
import numpy as np
data = np.genfromtxt('data.csv', delimiter = ',', names = True)
print(data)
print(data['id']) # 將標題看成能夠充當索引的標籤,用它們按列抽取標籤
print(data[0]) # 使用數值索引按行索取
執行結果:
[(1., 123., 1.4, 23.) (2., 110., nan, 18.) (3., nan, 2.1, 19.)]
[1. 2. 3.]
(1., 123., 1.4, 23.)
相關推薦
python模組之numpy.random
最近在看程式碼的過程中碰到成隨機數的函式,因此接觸到不少numpy子模組random中的函式,上網也查了比較多,大家寫的真好啊!於是,我也想整理份,但也知自己水平低!所以寫的不好的地方還望大家多多指出! 目前接觸random模組中的函式也不多,但幾個常用的都會介紹下,以後
Python模組之NumPy
1 多維陣列adarray 程式示例: b = np.zeros((2, 3, 5)) print(b) print(b.ndim) print(b.size) print(b.shape) 執行結果: [[[0. 0. 0. 0. 0.] [0. 0.
Python常用模組之numpy
numpy在討論numpy的具體函式和方法之前,我要先說明一下兩個問題:1,numpy中的陣列和向量。2,numpy中的“多軸陣列”。維度vs軸數numpy中裡有多維陣列,為了避免和線性代數中的多維陣列區別開,這裡暫時稱之為多軸陣列。我們首先生成一個三維陣列,裡面存放數字0-
python學習之numpy實戰
PE som python hello sin size choice .sh exp import numpy as np def main(): lst=[[1,3,5],[2,4,6]] print(‘hello world‘) print
python模組之bsddb: bdb高效能嵌入式資料庫
基礎知識 bsddb模組是用來操作bdb的模組,bdb是著名的Berkeley DB,它的效能非常好,mysql的儲存後端引擎都支援bdb的方式。這裡簡單介紹一些關於bsddb的使用方法。 bdb不同於一般的關係資料庫,它儲存的資料只能是以key和value組成的一對資料,使用就像pyt
Python模組之: ConfigParser 配置檔案讀取 Python模組之: ConfigParser 配置檔案讀取
Python模組之: ConfigParser 配置檔案讀取 ConfigParser用於讀寫類似INI檔案的配置檔案,配置檔案的內容可組織為組,還支援多個選項值(option-value)型別。 ConfigParser使用用的配置檔案格式由一個或多個命名的節(s
【轉載】python模組之poplib: 用pop3收取郵件
轉載自: http://www.cnblogs.com/sislcb/archive/2008/12/01/1344858.html python的poplib模組是用來從pop3收取郵件的,也可以說它是處理郵件的第一步。 &nbs
python模組之xml
xml模組 xml結構 xml是種實現不同語言或程式之間進行資料交換的協議,跟json差不多,但沒json使用簡單。但是因為歷史遺留問題,至今很多行業依然使用xml這種資料格式。 xml的格式如下,是通過<>節點來區別資料結構的。 <?xml version="1.0" e
python--模組之random隨機數模組
作用是產生隨機數 import random random.random:用於生成一個0--1的隨機浮點數。 print(random.random())>>0.3355102133472131 random.uniform:用於生成一個指定範圍內的隨機浮點數。 prin
python模組 - psutil python模組之psutil詳解
一、psutil模組: 1. psutil模組簡介 他是一個跨平臺庫 ( http://pythonhosted.org/psutil/ ) 能夠輕鬆實現獲取系統執行的程序和系統利用率(包括CPU、記憶體、磁碟、網路等)資訊。它主
python學習之numpy的使用
numpy主要模組如下: numpy.linalg 支援線性代數的各種功能 numpy.fft 支援離散傅立葉變換 numpy.matlib 返回矩陣物件 nump
python模組之configparser
此模組用於生成和修改常見配置文件,當前模組的名稱在 python 3.x 版本中變更為 configparser。 解析下面的檔案格式: [DEFAULT] ServerAliveInterval = 45 Compression = yes CompressionLevel = 9 Forw
python模組之hashlib
加密演算法介紹 HASH Hash,一般翻譯做“雜湊”,也有直接音譯為”雜湊”的,就是把任意長度的輸入(又叫做預對映,pre-image),通過雜湊演算法,變換成固定長度的輸出,該輸出就是雜湊值。這種轉換是一種壓縮對映,也就是,雜湊值的空間通常遠小於輸入的空間,不同的輸入可能會雜湊成相同的輸出,而不可能從
Python模組之BeautifulSoup4
最近有個私人需求用到了爬蟲,雖然自己更擅長的是Java,.NET這樣的靜態語言;但在網上搜索到的爬蟲資料指向Python的居多,而且自從2013年用Python2.7寫了一年指令碼之後就甚少接觸Python,而現在Python的火熱有愈演愈烈之勢,遂決定使用P
python模組之urllib.request基礎使用
</script> <script type="text/javascript">var Cookie={set:function(e,t,o,i,s,n){document.cookie=e+"="+(n?t:escape(t))+(s?"; expires="+s.toGMTS
python模組之itertools
1 chain(*可迭代物件) chain 迭代器能夠將多個可迭代物件合併成一個更長的可迭代物件。實際上,我參與的一個專案中最近就需要這一功能。我有一個列表,裡面已經包含一些元素,接著想把另外兩個列表新增到最初那個列表中。注意,我們想新增的是兩個列表的元素。最初,我是這樣做的: >&g
Python模組之collections
Python擁有一些內建的資料型別,比如str, int, list, tuple, dict等, collections模組在這些內建資料型別的基礎上,提供了幾個額外的資料型別: namedtuple(): 生成可以使用名字來訪問元素內容的tuple子類 d
Python學習之Numpy基礎(二)
一:判斷array中的值是否滿足條件vector = numpy.array([10, 20, 30, 40, 50]) equal_to_ten = (vector == 10) print(equal_to_ten)列印結果:[ True False False Fals
python模組之json_pickle_shelve
#!/usr/bin/env python # coding:utf-8 import json ## 非常重要的模組,用於不同種程式語言間交換資料。 dic= {"name":'alex',"age":38,"desc":"金角大王"} print(dic["name"]) data = jso
python模組之_正則 re_configparser_logging_hashlib
正則表示式的內容放在最下面了 configparser 模組: #!/usr/bin/env python # coding:utf-8 import configparser # 專門用於操作配置檔案的模組 # config = configparser.Conf