copyfile(src, dst) #src, dst 都需是檔名, 如果dst 存在或無許可權,會丟擲異常
copy(src, dst) #dst 可以是目錄名。
shutil.copyfile( src, dst) 從源src複製到dst中去,當然前提是目標位址是具備可寫許可權,丟擲的異常資訊為ioexception.。
如果當前的dst已存在的話就會被覆蓋掉shutil.move( src, dst) 移動檔案或重新命名,shutil.copymode( src, dst) 只是會複製其許可權其他的東西是不會被複製的,shutil.copystat( src, dst) 複製許可權、最後訪問時間、最後修改時間,shutil.copy( src, dst) 複製乙個檔案到乙個檔案或乙個目錄,shutil.copy2( src, dst) 在copy上的基礎上再複製檔案最後訪問時間與修改時間也複製過來了,類似於cp –p的東西
shutil.copy2( src, dst) 如果兩個位置的檔案系統是一樣的話相當於是rename操作,只是改名;如果是不在相同的檔案系統的話就是做move操作,shutil.copytree( olddir, newdir, true/flase),把olddir拷貝乙份newdir,如果第3個引數是true,則複製目錄時將保持資料夾下的符號連線,如果第3個引數是false,則將在複製的目錄下生成物理副本來替代符號連線,shutil.rmtree( src ) 遞迴刪除乙個目錄以及目錄內的所有內容
np_utils.to_categorical
np_utils.to_categorical用於將標籤轉化為形如(nb_samples, nb_classes)的二值序列。
假設num_classes = 10。
如將[1,2,3,……4]轉化成:
[[0,1,0,0,0,0,0,0]
[0,0,1,0,0,0,0,0]
[0,0,0,1,0,0,0,0]
……[0,0,0,0,1,0,0,0]]
這樣的形態。
如將y_train轉化為二值序列,可以用如下方式
生成器是python語法中特別重要的語法,python之所以天生適合處理大資料類的問題,就是因為有生成器等這些語法存在。
對於乙個很大的列表,如果我們直接用列表生成式的話,會占用很大的記憶體空間。
s =
[i**
2for i in
range
(100000000000000000
)]
這樣的語法,往往利用率很低,所以我們需要用到生成器generator用法,
s =
(i**
2for i in
range
(100000000000000000
))
這樣我們每次next(s)是就分配乙個記憶體空間,而不是一次性分配所有的記憶體空間。
上面就是生成器最簡單的使用方法之一
使用生成器的第二種方法:將函式定義成生成器,如果乙個函式定義中包含yield關鍵字,那麼這個函式就不是乙個普通函式,而是乙個生成器。
生成器和函式的執行流程不一樣,函式是順序執行,遇到return語句或者最後一行函式語句就返回,而變成生成器的函式,再每次呼叫next()的時候執行,遇到yield語句返回,再次執行時從上次返回的yield語句處繼續執行。
def
odd():
print
('step 1'
)yield
1print
('step 2'
)yield(3
)print
('step 3'
)yield(5
)
>>
> o = odd(
)>>
>
next
(o)step 1
1>>
>
next
(o)step 2
3>>
>
next
(o)step 3
5>>
>
next
(o)traceback (most recent call last)
: file ""
, line 1,in
stopiteration
可以看到, odd不是普通函式,而是生成器,在執行過程中,遇到yield就中斷,下次又繼續執行。執行3次yield後,已經沒有yield可以執行了,所以,第4次呼叫**next(o)**就報錯。
def
fib(
max)
: n, a, b =0,
0,1while n <
max:
yield b
a, b = b, a + b
n = n +
1return
'done'
>>
>
for n in fib(6)
:...
print
(n)...
1123
58
但是用for迴圈呼叫generator時,發現拿不到generator的return語句的返回值。如果想要拿到返回值,必須捕獲stopiteration錯誤,返回值包含在stopiteration的值中:
>>
> g = fib(6)
>>
>
while
true:.
..try:..
. x =
next
(g)...
print
('g:'
, x)..
.except stopiteration as e:..
.print
('generator return value:'
, e.value)..
.break..
.g:1g:
1g:2g:
3g:5g:
8generator return value: done
參考:
習題:
def
myeven
(max):
n =0while n<=
max:
if n %2==
0:yield n
n = n+
1
n=eval
(input()
)s =
[str
(i)for i in myeven(n)
]ans =
','.join(s)
print
(ans)
def
evengenerator
(n):
i =0while i <= n:
if i %2==
0:yield i
i +=
1n =
int(
raw_input()
)values =
for i in evengenerator(n)
:str
(i))
print
",".join(values)
小駝峰法
變數一般用小駝峰法標識。駝峰法的意思是:除第乙個單詞之外,其他單詞首字母大寫。譬如
int mystudentcount;
變數mystudentcount第乙個單詞是全部小寫,後面的單詞首字母大寫。
大駝峰法
相比小駝峰法,大駝峰法(即帕斯卡命名法)把第乙個單詞的首字母也大寫了。常用於 類名,命名空間等。譬如
public class databaseuser;
python函式使用易錯點 Python易錯例題
為了更好檢測效果,請在作答時最好不要複製 去執行 第一題 實踐 請使用zip函式將已給dict的key和value倒置 原dict 要求結果 第二題 高頻易錯 def add a if a 1 return 1 else return a add a 1 def print to add a pri...
Python易錯點總結
三個單引號 或者雙引號 既可以注釋也可以當作字串。python 中的淺拷貝只拷貝父物件不拷貝子物件,深拷貝父物件子物件全部拷貝。import copy a 1,2,3,4,a b b a c copy.copy a d copy.deepcopy a 5 a 4 c python中的命名方式 參考 ...
Python易錯點總結
1.定義只有乙個元素的元組必須要加逗號,否則只是乙個數.tuple 1,print tuple 2.對於列表和元組,下標值為 1都代表是最後乙個元素的下標,2代表倒數第二個元素的下標,依次類推.print list 1 print tuple 1 3.元組和列表的不同之處在於,元組一經初始化後就不能...