python 小技巧记录
- 我发现
- 1、str转bool方法
- 2、python判断文件和文件夹是否存在、创建文件夹
- 3、文件操作
- 4、python字典遍历的几种方法
- 4.1、遍历key值
- 4.2、遍历value值
- 4.3、遍历字典项
- 4.4、遍历字典健值
- 5、Python 列表(List) 的三种遍历(序号和值)方法
- 6、python字典判断某个Key是否存在
我发现
好多有用的小技巧其实都不难,但是每次用的时候,我都要去百度,主要是懒得去记,刚好突然有个想法,总结一些实用小技巧,归类整理,免得到处百度,浪费不必要的时间:
1、str转bool方法
python中字符串“True” 和 “False"转为bool类型时, 不能通过bool(xx)强转。
注意是因为在python中,除了’’、""、0、()、[]、{}、None为False, 其他转换都为True。 也就是说字符串如果不为空,则永远转换为True。
好吧, 只能通过这样了:
data = “True”
isTrue = data == str(True)
此时isTrue则是bool类型
2、python判断文件和文件夹是否存在、创建文件夹
python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。
先给出一大堆的API说明吧:(
注释绿色标记
常用到的API, 也就三到四个)
得到当前工作目录,即当前Python脚本工作的目录路径
:
os
.
getcwd
(
)
返回指定目录下的所有文件和目录名
:
os
.
listdir
(
)
'''函数用来删除一个文件:os.remove()'''
删除多个目录:os
.
removedirs(r“c:\python”)
检验给出的路径是否是一个文件:os
.
path
.
isfile
(
)
检验给出的路径是否是一个目录:os
.
path
.
isdir
(
)
判断是否是绝对路径:os
.
path
.
isabs
(
)
'''检验给出的路径是否真地存:os.path.exists()'''
返回一个路径的目录名和文件名
:
os
.
path
.
split
(
)
eg os
.
path
.
split
(
'/home/swaroop/byte/code/poem.txt'
)
结果:
(
'/home/swaroop/byte/code'
,
'poem.txt'
)
分离扩展名:os
.
path
.
splitext
(
)
获取路径名:os
.
path
.
dirname
(
)
获取文件名:os
.
path
.
basename
(
)
运行shell命令
:
os
.
system
(
)
读取和设置环境变量
:
os
.
getenv
(
)
与os
.
putenv
(
)
给出当前平台使用的行终止符
:
os
.
linesep Windows使用
'\r\n'
,Linux使用
'\n'
而Mac使用
'\r'
指示你正在使用的平台:os
.
name 对于Windows,它是
'nt'
,而对于Linux
/
Unix用户,它是
'posix'
'''重命名:os.rename(old, new)'''
'''创建多级目录:os.makedirs(r'c:\python\test')'''
创建单个目录:os
.
mkdir(“test”)
获取文件属性:os
.
stat(
file
)
修改文件权限与时间戳:os
.
chmod(
file
)
'''终止当前进程:os.exit()'''
'''获取文件大小:os.path.getsize(filename)'''
3、文件操作
实用方式:
with
open
(
'path\file_name'
,
'r+'
)
as
file_obj
:
contents
=
file_obj
.
read
(
)
print
(
contents
)
API解读
os
.
mknod
(
"test.txt"
)
创建空文件
fp
=
open
(
"test.txt"
,
w
)
直接打开一个文件,如果文件不存在则创建文件
关于
open
模式:
w 以写方式打开,
a 以追加模式打开
(
从 EOF 开始
,
必要时创建新文件
)
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
r
+
以读写模式打开
w
+
以读写模式打开
(
参见 w
)
a
+
以读写模式打开
(
参见 a
)
rb 以二进制读模式打开
wb 以二进制写模式打开
(
参见 w
)
ab 以二进制追加模式打开
(
参见 a
)
rb
+
以二进制读写模式打开
(
参见 r
+
)
wb
+
以二进制读写模式打开
(
参见 w
+
)
ab
+
以二进制读写模式打开
(
参见 a
+
)
'''
文件API解读
'''
fp
.
read
(
[
size
]
)
'''size为读取的长度,以byte为单位 (如果未给定或为负则读取所有)'''
fp
.
readline
(
[
size
]
)
'''读一行,如果定义了size,有可能返回的只是一行的一部分(包括 "\n" 字符)'''
fp
.
readlines
(
[
size
]
)
'''把文件每一行作为一个list的一个成员,并返回这个list。
其实它的内部是通过循环调用readline()来实现的。
如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。
'''
fp
.
write
(
str
)
'''把str写到文件中,write()并不会在str后加上一个换行符'''
fp
.
writelines
(
seq
)
'''把seq的内容全部写到文件中(多行一次性写入)。
这个函数也只是忠实地写入,不会在每行后面加上任何东西。'''
fp
.
close
(
)
'''关闭文件。python会在一个文件不用后自动关闭文件,
不过这一功能没有保证,最好还是养成自己关闭的习惯。
如果一个文件在关闭后还对其进行操作会产生ValueError'''
fp
.
flush
(
)
'''把缓冲区的内容写入硬盘'''
fp
.
fileno
(
)
'''返回一个长整型的”文件标签“'''
fp
.
isatty
(
)
'''文件是否是一个终端设备文件(unix系统中的)'''
fp
.
tell
(
)
'''返回文件操作标记的当前位置,以文件的开头为原点'''
fp
.
next
(
)
'''返回下一行,并将文件操作标记位移到下一行。
把一个file用于for … in file这样的语句时,
就是调用next()函数来实现遍历的。'''
fp
.
seek
(
offset
[
,
whence
]
)
'''将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,
一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,
1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,
如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。'''
fp
.
truncate
(
[
size
]
)
'''把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。
如果size比文件的大小还要大,依据系统的不同可能是不改变文件,
也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。'''
目录操作:
os
.
mkdir
(
"file"
)
创建目录
复制文件:
shutil
.
copyfile
(
"oldfile"
,
"newfile"
)
oldfile和newfile都只能是文件
shutil
.
copy
(
"oldfile"
,
"newfile"
)
oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
复制文件夹:
shutil
.
copytree
(
"olddir"
,
"newdir"
)
olddir和newdir都只能是目录,且newdir必须不存在
重命名文件(目录)
os
.
rename
(
"oldname"
,
"newname"
)
文件或目录都是使用这条命令
移动文件(目录)
shutil
.
move
(
"oldpos"
,
"newpos"
)
删除文件
os
.
remove
(
"file"
)
删除目录
os
.
rmdir
(
"dir"
)
只能删除空目录
shutil
.
rmtree
(
"dir"
)
空目录、有内容的目录都可以删
转换目录
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():完全等价。
4.2、遍历value值
>>
>
for
value
in
a
.
values
(
)
:
print
(
value
)
1
2
3
4.3、遍历字典项
>>
>
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()完全等价
5、Python 列表(List) 的三种遍历(序号和值)方法
#!/usr/bin/env python
# -*- coding: utf-8 -*-
if
__name__
==
'__main__'
:
list
=
[
'html'
,
'js'
,
'css'
,
'python'
]
# 方法1
print
'遍历列表方法1:'
for
i
in
list
:
print
(
"序号:%s 值:%s"
%
(
list
.
index
(
i
)
+
1
,
i
)
)
print
'\n遍历列表方法2:'
# 方法2
for
i
in
range
(
len
(
list
)
)
:
print
(
"序号:%s 值:%s"
%
(
i
+
1
,
list
[
i
]
)
)
# 方法3
print
'\n遍历列表方法3:'
for
i
,
val
in
enumerate
(
list
)
:
print
(
"序号:%s 值:%s"
%
(
i
+
1
,
val
)
)
# 方法3
print
'\n遍历列表方法3 (设置遍历开始初始位置,只改变了起始序号):'
for
i
,
val
in
enumerate
(
list
,
2
)
:
print
(
"序号:%s 值:%s"
%
(
i
+
1
,
val
)
)
6、python字典判断某个Key是否存在
第一种方法:使用自带函数实现(python2)。
在python的字典的属性方法里面有一个has_key()方法,这个方法使用起来非常简单。
#生成一个字典
d
=
{
'name'
:
{
}
,
'age'
:
{
}
,
'sex'
:
{
}
}
#打印返回值
print
d
.
has_key
(
'name'
)
#结果返回True
第二种方法:使用in方法(python3)
#生成一个字典
d
=
{
'name'
:
{
}
,
'age'
:
{
}
,
'sex'
:
{
}
}
#打印返回值,其中d.keys()是列出字典所有的key
print
name
in
d
.
keys
(
)
#结果返回True
上面两种方式,我更 推荐 使用 第二种 ,因为 has_key()是python2.2 之前的方法,而且使用 in 的方法会更快一些。
最后告诉大家一点:除了使用 in 还可以使用 not in ,判定这个key不存在哦~
ps: 未完待续…