python 小技巧記錄
- 我發(fā)現(xiàn)
- 1、str轉(zhuǎn)bool方法
- 2、python判斷文件和文件夾是否存在、創(chuàng)建文件夾
- 3、文件操作
- 4、python字典遍歷的幾種方法
- 4.1、遍歷key值
- 4.2、遍歷value值
- 4.3、遍歷字典項(xiàng)
- 4.4、遍歷字典健值
- 5、Python 列表(List) 的三種遍歷(序號(hào)和值)方法
- 6、python字典判斷某個(gè)Key是否存在
我發(fā)現(xiàn)
好多有用的小技巧其實(shí)都不難,但是每次用的時(shí)候,我都要去百度,主要是懶得去記,剛好突然有個(gè)想法,總結(jié)一些實(shí)用小技巧,歸類整理,免得到處百度,浪費(fèi)不必要的時(shí)間:
1、str轉(zhuǎn)bool方法
python中字符串“True” 和 “False"轉(zhuǎn)為bool類型時(shí), 不能通過(guò)bool(xx)強(qiáng)轉(zhuǎn)。
注意是因?yàn)樵趐ython中,除了’’、""、0、()、[]、{}、None為False, 其他轉(zhuǎn)換都為True。 也就是說(shuō)字符串如果不為空,則永遠(yuǎn)轉(zhuǎn)換為True。
好吧, 只能通過(guò)這樣了:
data = “True”
isTrue = data == str(True)
此時(shí)isTrue則是bool類型
2、python判斷文件和文件夾是否存在、創(chuàng)建文件夾
python中對(duì)文件、文件夾(文件操作函數(shù))的操作需要涉及到os模塊和shutil模塊。
先給出一大堆的API說(shuō)明吧:(
注釋綠色標(biāo)記
常用到的API, 也就三到四個(gè))
得到當(dāng)前工作目錄,即當(dāng)前Python腳本工作的目錄路徑
:
os
.
getcwd
(
)
返回指定目錄下的所有文件和目錄名
:
os
.
listdir
(
)
'''函數(shù)用來(lái)刪除一個(gè)文件:os.remove()'''
刪除多個(gè)目錄:os
.
removedirs(r“c:\python”)
檢驗(yàn)給出的路徑是否是一個(gè)文件:os
.
path
.
isfile
(
)
檢驗(yàn)給出的路徑是否是一個(gè)目錄:os
.
path
.
isdir
(
)
判斷是否是絕對(duì)路徑:os
.
path
.
isabs
(
)
'''檢驗(yàn)給出的路徑是否真地存:os.path.exists()'''
返回一個(gè)路徑的目錄名和文件名
:
os
.
path
.
split
(
)
eg os
.
path
.
split
(
'/home/swaroop/byte/code/poem.txt'
)
結(jié)果:
(
'/home/swaroop/byte/code'
,
'poem.txt'
)
分離擴(kuò)展名:os
.
path
.
splitext
(
)
獲取路徑名:os
.
path
.
dirname
(
)
獲取文件名:os
.
path
.
basename
(
)
運(yùn)行shell命令
:
os
.
system
(
)
讀取和設(shè)置環(huán)境變量
:
os
.
getenv
(
)
與os
.
putenv
(
)
給出當(dāng)前平臺(tái)使用的行終止符
:
os
.
linesep Windows使用
'\r\n'
,Linux使用
'\n'
而Mac使用
'\r'
指示你正在使用的平臺(tái):os
.
name 對(duì)于Windows,它是
'nt'
,而對(duì)于Linux
/
Unix用戶,它是
'posix'
'''重命名:os.rename(old, new)'''
'''創(chuàng)建多級(jí)目錄:os.makedirs(r'c:\python\test')'''
創(chuàng)建單個(gè)目錄:os
.
mkdir(“test”)
獲取文件屬性:os
.
stat(
file
)
修改文件權(quán)限與時(shí)間戳:os
.
chmod(
file
)
'''終止當(dāng)前進(jìn)程:os.exit()'''
'''獲取文件大小:os.path.getsize(filename)'''
3、文件操作
實(shí)用方式:
with
open
(
'path\file_name'
,
'r+'
)
as
file_obj
:
contents
=
file_obj
.
read
(
)
print
(
contents
)
API解讀
os
.
mknod
(
"test.txt"
)
創(chuàng)建空文件
fp
=
open
(
"test.txt"
,
w
)
直接打開(kāi)一個(gè)文件,如果文件不存在則創(chuàng)建文件
關(guān)于
open
模式:
w 以寫方式打開(kāi),
a 以追加模式打開(kāi)
(
從 EOF 開(kāi)始
,
必要時(shí)創(chuàng)建新文件
)
r 以只讀方式打開(kāi)文件。文件的指針將會(huì)放在文件的開(kāi)頭。這是默認(rèn)模式。
r
+
以讀寫模式打開(kāi)
w
+
以讀寫模式打開(kāi)
(
參見(jiàn) w
)
a
+
以讀寫模式打開(kāi)
(
參見(jiàn) a
)
rb 以二進(jìn)制讀模式打開(kāi)
wb 以二進(jìn)制寫模式打開(kāi)
(
參見(jiàn) w
)
ab 以二進(jìn)制追加模式打開(kāi)
(
參見(jiàn) a
)
rb
+
以二進(jìn)制讀寫模式打開(kāi)
(
參見(jiàn) r
+
)
wb
+
以二進(jìn)制讀寫模式打開(kāi)
(
參見(jiàn) w
+
)
ab
+
以二進(jìn)制讀寫模式打開(kāi)
(
參見(jiàn) a
+
)
'''
文件API解讀
'''
fp
.
read
(
[
size
]
)
'''size為讀取的長(zhǎng)度,以byte為單位 (如果未給定或?yàn)樨?fù)則讀取所有)'''
fp
.
readline
(
[
size
]
)
'''讀一行,如果定義了size,有可能返回的只是一行的一部分(包括 "\n" 字符)'''
fp
.
readlines
(
[
size
]
)
'''把文件每一行作為一個(gè)list的一個(gè)成員,并返回這個(gè)list。
其實(shí)它的內(nèi)部是通過(guò)循環(huán)調(diào)用readline()來(lái)實(shí)現(xiàn)的。
如果提供size參數(shù),size是表示讀取內(nèi)容的總長(zhǎng),也就是說(shuō)可能只讀到文件的一部分。
'''
fp
.
write
(
str
)
'''把str寫到文件中,write()并不會(huì)在str后加上一個(gè)換行符'''
fp
.
writelines
(
seq
)
'''把seq的內(nèi)容全部寫到文件中(多行一次性寫入)。
這個(gè)函數(shù)也只是忠實(shí)地寫入,不會(huì)在每行后面加上任何東西。'''
fp
.
close
(
)
'''關(guān)閉文件。python會(huì)在一個(gè)文件不用后自動(dòng)關(guān)閉文件,
不過(guò)這一功能沒(méi)有保證,最好還是養(yǎng)成自己關(guān)閉的習(xí)慣。
如果一個(gè)文件在關(guān)閉后還對(duì)其進(jìn)行操作會(huì)產(chǎn)生ValueError'''
fp
.
flush
(
)
'''把緩沖區(qū)的內(nèi)容寫入硬盤'''
fp
.
fileno
(
)
'''返回一個(gè)長(zhǎng)整型的”文件標(biāo)簽“'''
fp
.
isatty
(
)
'''文件是否是一個(gè)終端設(shè)備文件(unix系統(tǒng)中的)'''
fp
.
tell
(
)
'''返回文件操作標(biāo)記的當(dāng)前位置,以文件的開(kāi)頭為原點(diǎn)'''
fp
.
next
(
)
'''返回下一行,并將文件操作標(biāo)記位移到下一行。
把一個(gè)file用于for … in file這樣的語(yǔ)句時(shí),
就是調(diào)用next()函數(shù)來(lái)實(shí)現(xiàn)遍歷的。'''
fp
.
seek
(
offset
[
,
whence
]
)
'''將文件打操作標(biāo)記移到offset的位置。這個(gè)offset一般是相對(duì)于文件的開(kāi)頭來(lái)計(jì)算的,
一般為正數(shù)。但如果提供了whence參數(shù)就不一定了,whence可以為0表示從頭開(kāi)始計(jì)算,
1表示以當(dāng)前位置為原點(diǎn)計(jì)算。2表示以文件末尾為原點(diǎn)進(jìn)行計(jì)算。需要注意,
如果文件以a或a+的模式打開(kāi),每次進(jìn)行寫操作時(shí),文件操作標(biāo)記會(huì)自動(dòng)返回到文件末尾。'''
fp
.
truncate
(
[
size
]
)
'''把文件裁成規(guī)定的大小,默認(rèn)的是裁到當(dāng)前文件操作標(biāo)記的位置。
如果size比文件的大小還要大,依據(jù)系統(tǒng)的不同可能是不改變文件,
也可能是用0把文件補(bǔ)到相應(yīng)的大小,也可能是以一些隨機(jī)的內(nèi)容加上去。'''
目錄操作:
os
.
mkdir
(
"file"
)
創(chuàng)建目錄
復(fù)制文件:
shutil
.
copyfile
(
"oldfile"
,
"newfile"
)
oldfile和newfile都只能是文件
shutil
.
copy
(
"oldfile"
,
"newfile"
)
oldfile只能是文件夾,newfile可以是文件,也可以是目標(biāo)目錄
復(fù)制文件夾:
shutil
.
copytree
(
"olddir"
,
"newdir"
)
olddir和newdir都只能是目錄,且newdir必須不存在
重命名文件(目錄)
os
.
rename
(
"oldname"
,
"newname"
)
文件或目錄都是使用這條命令
移動(dòng)文件(目錄)
shutil
.
move
(
"oldpos"
,
"newpos"
)
刪除文件
os
.
remove
(
"file"
)
刪除目錄
os
.
rmdir
(
"dir"
)
只能刪除空目錄
shutil
.
rmtree
(
"dir"
)
空目錄、有內(nèi)容的目錄都可以刪
轉(zhuǎn)換目錄
os
.
chdir
(
"path"
)
換路徑
4、python字典遍歷的幾種方法
4.1、遍歷key值
>>
>
a
{
'a'
:
'1'
,
'b'
:
'2'
,
'c'
:
'3'
}
>>
>
for
key
in
a
:
print
(
key
+
':'
+
a
[
key
]
)
a
:
1
b
:
2
c
:
3
>>
>
for
key
in
a
.
keys
(
)
:
print
(
key
+
':'
+
a
[
key
]
)
a
:
1
b
:
2
c
:
3
在使用上,for key in a和 for key in a.keys():完全等價(jià)。
4.2、遍歷value值
>>
>
for
value
in
a
.
values
(
)
:
print
(
value
)
1
2
3
4.3、遍歷字典項(xiàng)
>>
>
for
kv
in
a
.
items
(
)
:
print
(
kv
)
(
'a'
,
'1'
)
(
'b'
,
'2'
)
(
'c'
,
'3'
)
4.4、遍歷字典健值
>>
>
for
key
,
value
in
a
.
items
(
)
:
print
(
key
+
':'
+
value
)
a
:
1
b
:
2
c
:
3
>>
>
for
(
key
,
value
)
in
a
.
items
(
)
:
print
(
key
+
':'
+
value
)
a
:
1
b
:
2
c
:
3
在使用上for key,value in a.items()與for (key,value) in a.items()完全等價(jià)
5、Python 列表(List) 的三種遍歷(序號(hào)和值)方法
#!/usr/bin/env python
# -*- coding: utf-8 -*-
if
__name__
==
'__main__'
:
list
=
[
'html'
,
'js'
,
'css'
,
'python'
]
# 方法1
print
'遍歷列表方法1:'
for
i
in
list
:
print
(
"序號(hào):%s 值:%s"
%
(
list
.
index
(
i
)
+
1
,
i
)
)
print
'\n遍歷列表方法2:'
# 方法2
for
i
in
range
(
len
(
list
)
)
:
print
(
"序號(hào):%s 值:%s"
%
(
i
+
1
,
list
[
i
]
)
)
# 方法3
print
'\n遍歷列表方法3:'
for
i
,
val
in
enumerate
(
list
)
:
print
(
"序號(hào):%s 值:%s"
%
(
i
+
1
,
val
)
)
# 方法3
print
'\n遍歷列表方法3 (設(shè)置遍歷開(kāi)始初始位置,只改變了起始序號(hào)):'
for
i
,
val
in
enumerate
(
list
,
2
)
:
print
(
"序號(hào):%s 值:%s"
%
(
i
+
1
,
val
)
)
6、python字典判斷某個(gè)Key是否存在
第一種方法:使用自帶函數(shù)實(shí)現(xiàn)(python2)。
在python的字典的屬性方法里面有一個(gè)has_key()方法,這個(gè)方法使用起來(lái)非常簡(jiǎn)單。
#生成一個(gè)字典
d
=
{
'name'
:
{
}
,
'age'
:
{
}
,
'sex'
:
{
}
}
#打印返回值
print
d
.
has_key
(
'name'
)
#結(jié)果返回True
第二種方法:使用in方法(python3)
#生成一個(gè)字典
d
=
{
'name'
:
{
}
,
'age'
:
{
}
,
'sex'
:
{
}
}
#打印返回值,其中d.keys()是列出字典所有的key
print
name
in
d
.
keys
(
)
#結(jié)果返回True
上面兩種方式,我更 推薦 使用 第二種 ,因?yàn)? has_key()是python2.2 之前的方法,而且使用 in 的方法會(huì)更快一些。
最后告訴大家一點(diǎn):除了使用 in 還可以使用 not in ,判定這個(gè)key不存在哦~
ps: 未完待續(xù)…
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
