2.6 使用for循环遍历文件
打开文件:
open方式:
r:以只读方式打开,文件不存在会报错
w:以写方式打开,文件不存在会创建,文件存在会被覆盖
a:以追加模式打开,文件存在会在文件最后追加,文件不存在会创建
r+:以读写模式打开
w+:以读写模式打开(参见w)
a+:以读写模式打开(参见a)
rb:以二进制写模式打开
wb:以二进制写模式打开(参见w)
ab:以二进制追加模式打开(参见a)
rb+:以二进制读写模式打开(参见r+)
wb+:以二进制读写模式打开(参见w+)
ab+:以二进制读写模式打开(参见a+)
1. 默认以r方式打开
2. 以其他方式打开
3. fd = open('/root/file') 用内置函数open打开文件
fd.close() 使用open内置函数打开后,使用fd.close()关闭;
读取内容时指针会指向相应的位置,读完显示空字符串;
fd.read() 读取全部内容,从头到尾;返回的是字符串;
fd.read(2) 读取两位;
fd.readline() 每运行一次读取一行;指针到最后返回空字符串;
fd.readlines() 以列表形式读取
fd.next() 运行一次显示一行
4. fd = open('/root/file', 'w') 以w方式打开文件
只接受字符串,不支持数值;
文件内容会被覆盖;
写入完成后执行fd.close();
5. fd = open('/root/file', 'a') 以a方式打开文件
6. 脚本示例:
#!/usr/bin/python
fd = open('/root/file')
for line in fd.readlines():
print line,
注:文件里本身有换行符,line后面加上逗号抑制print的换行符,不然会出现空行;
当文件很大时fd.readlines会占用很大内存,所以建议使用下面脚本:
#!/usr/bin/python
fd = open('/root/file')
for line in fd:
print line,
注:for line in fd: 中fd是对象,循环时是遍历一遍取一次数据,不占用内存;
2.7 使用while循环遍历文件
1. while循环使用open遍历文件
#!/usr/bin/python
fd = open('/root/file')
while True:
x = fd.readline()
if not x:
break
print x,
fd.close()
注:循环遍历文件时结束时尽量fd.close()关闭文件;
2. while 中使用with open遍历文件
不需要close了;
格式:with open() as xxx:
#! /usr/bin/python
with open('/root/file') as fd:
while 1:
line = fd.readline()
if not line:
break
print line,
2.8 统计系统剩余的内存
1. 查看系统剩余内存
free 命令
cat /proc/meminfo
2. 字符串的startswith()方法:
判断是否有以指定字符串开头的行;
返回的是bool值,true或false;
3. 字符串的split()方法:
以空格或则tab键分割,并在输出为列表;
4. 统计系统剩余内存,以及使用百分比:
#! /usr/bin/python
with open('/proc/meminfo') as fd:
for line in fd:
if line.startswith('MemTotal'):
total = line.split()[1]
continue
if line.startswith('MemFree'):
free = line.split()[1]
break
persent = '%.2f' % ((float(free)/float(total))*100)+'%'
print 'free:'+ '%.2f' % (int(free)/1024.0)+'M'
print 'free%:'+ persent
注:
float()转换成浮点型
‘%.2f是字符串格式化并保留小数点后两位
2.9 数据类型转换计算(计算mac地址)
1. 十六进制字符串转为十进制
- int('12' ,16)
- int('0x12' , 16)
- 0x表示16进制
2. 十进制转成十六进制
hex(10)
3. 十进制转换字符串
4. 字符串转成数字
5. python计算一个mac地址的下个地址
通常服务器里有多个网卡的话,网卡的mac地址基本都是挨着的。
#! /usr/bin/env
mac = '52:54:00:0c:9f:0a'
last_two = mac[-2:]
front_mac = mac[:-2]
plus_one = int(last_two ,16) + 1
if plus_one in range(10):
new_last_two = '0' + hex(plus_one)[2:]
elif len(hex(plus_one)[2:]) == 1:
new_last_two = '0' + hex(plus_one)[2:]
next_mac = front_mac + new_last_two
print next_mac
3.0 数据类型转换(列表与字典相互转换)
1. 字符串转列表
list[string]
2. 列表转字符串
‘’.join(list)
3. 字符串转元组
tuple(string)
4. 元组转字符串
''.join(tuple)
‘s’.join(): s 表示用什么分割字符串
5. 列表与元组互相转换
6. 字典转换成列表
字典的items()方法
7. 列表转为字典
dict()