1. python访问文件
通过内置函数open打开文件,看一下open函数解释:
打开文件
返回的是一个文件对象
1
|
fd
=
open
(
'/tmp/tmp.txt'
)
|
查看他的方法:
关闭文件:
1
|
fd.close()
|
向文件内写入:
1
|
fd
=
open
(
'/tmp/tmp.txt'
,
'w'
)
|
这样打开文件等于重写文件,文件原有的内容就覆盖掉了
1
|
fd.write(
"a"
)
|
这样写入文件,写入文件后不能查看到,我们必须把他关闭:
1
|
fd.close()
|
关闭之后,就可以查看到文件内的信息了。
追加内容,使用 a:
1
2
3
|
fd
=
open
(
"/tmp/tmp.txt"
,
"a"
)
fd.write(
'456/n'
)
fd.close()
|
读文件:
1
|
fd
=
open
(
"/tmp/tmp.txt"
)
|
默认不写是 r 模式,下面读取文件内容read函数:
1
2
|
fd.read()
'123\n456\n'
|
默认是从第一个字符,读到最后一个字符,读完整个文件
读完之后指针跑到了整个文件的最后,所以再次运行读:
1
2
|
fd.read()
''
|
只返回空了。
1
2
|
fd.read(
2
)
'12'
|
表示读两个字符,为空时从头读到结尾。
读一行:
1
2
3
4
|
fd.readline()
'456\n'
fd.readline()
''
|
第二次读已经没有第二行了,返回一个空的字符串。
读多行:
1
2
|
fd.readlines()
[
'123\n'
,
'456\n'
]
|
这个方法,有多少行,读多少行,并且返回一个list
每一行作为一个元素, 整个文件作为一个列表,反之,
每个元素代表每一行。
总结:
read() 函数返回的是 字符串
readline() 函数返回的是 字符串
readlines() 函数 返回的是 列表
for 循环遍历文件
1
2
3
|
fd
=
open
(
'/tmp/tmp.txt'
)
for
line
in
fd.readlines():
print
line,
|
后面加个 , 号,让print后面没有\n
上面那种写法,由于生成list,如果LIST很大,就会占用很多内存资源,
更节约资源的写法如下:
1
2
3
|
fd
=
open
(
'/tmp/tmp.txt'
)
for
line
in
fd:
print
line,
|
fd是一个文件对象,for循环对文件做遍历,遍历一次,取一行
这样就不会占用内存资源。
用for循环做遍历,其实就相当于使用next()函数
next()一次只取一行
2. while循环遍历文件
while 循环遍历文件
学之前,先理解fd.readline(),它是一行一行读,最后返回空字符串;
while是需要条件的,通过最后一行返回空的条件来退出循环:
使用 with open 方法打开文件执行完毕后会自动关闭
就不需要使用close关闭文件了
判断最后如果line是空的话就break,不是的话就print line
python2.6以后的版本支持这种写法。
3.统计系统剩余内存
用free 命令查看内存
其实使用free命令也是查看系统中的 /proc/meminfo
写个程序:
介绍一个字符串的方法:
str.startswith
查看介绍:
help(str.startswith)
判断字符串是以什么字符串开头的,如果是返回True,不是返回False。
找到开头的字符串后,如何取值?
用字符串的 split 方法,以字符串来分割为列表,再取列表中的元素。
结果是k,我们把结果变为m,total和free都是字符串,要进行转换
补充:free是字符串,因此比较字符串格式化后的输出类型:
4.数据类型转换(计算mac地址)
16进制转换为10进制
0x省略不写也可以
10进制转换成16进制
1
2
|
hex
(
10
)
'0xa'
|
查看hex()函数用法:
因为字符串之间不能进行加法运算的,只有数字可以。
有时候要将一些16进制的字符串进行运算,所以要转换成数字。
十进制转换为字符串
1
2
|
str
(
10
)
'10'
|
字符串转换为十进制
1
|
int
(
'10'
)
|
练习:
计算mac地址的下一个mac地址
查看系统的mac地址
mac地址是16进制
1
2
3
4
5
6
7
8
9
10
11
12
13
|
macaddr
=
'00:0C:29:D1:6F:E9'
prefix_mac
=
macaddr[:
-
3
]
##不包含后两位的mac地址
last_two
=
macaddr[
-
2
:]
##取mac地址最后两位,即E9
plus_one
=
int
(last_two,
16
)
+
1
##将最后两位转化成10进制,并加1
if
plus_one
in
range
(
10
):
##如果加1后的数字在0-9之间的话
new_last_two
=
hex
(plus_one) [
2
:]
##将加1的数转化成16进制,并取0x后面的数字
new_last_two
=
'0'
+
new_last_two
##前面判断了,plus_one是在0-9之间的数字,所以前面加个0
else
:
new_last_two
=
hex
(plus_one) [
2
:]
if
len
(new_last_two)
=
=
1
:
##判断单独字符的形式,即0C这种形式。
new_last_two
=
'0'
+
new_last_two
new_mac
=
prefix_mac
+
':'
+
new_last_two
##新的mac地址
print
new_mac.upper()
##将mac地址转为大写
|
这个代码囊括了mac地址最后一位是:03、E9、0C 以这三种类型结尾的情况。
5.数据类型转换(列表与字典相互转换)
字符串转换成列表:
列表转换成字符串:
字符串的join方法:
字符串转换成元组:
元组转换成字符串:
列表转换成元组:
元组转换成列表:
字典转换成列表(items方法)
列表转换成字典
不是所有的列表和元组可以转换成字典,只有上面这种形式的元组或列表,可以转换成字典。