循环遍历文件
使用open来打开文件
打开模式:
- r:以读方式打开(只能打开存在的文件)
- w:以写方式打开(会覆盖存在的文件,文件不存在会创建)
- a:以追加方式打开(文件不存在会创建)
- r+:以读写方式打开
- w+:以读写方式打开(参考w)
- a+:以读写方式打开(参考a)
- rb:以二进制读模式打开(参考r)
- wb:以二进制写模式打开(参考w)
- ab:以二进制追加模式打开(参考a)
- rb+:以二进制读写模式打开(参考r+)
- wb+:以二进制读写模式打开(参考w+)
- ab+:以二进制读写模式打开(参考a+)
文件对象的方法:
– close:关闭文件
– write:写文件(只接收字符串)
– read:读文件(读取整个文件内容)
– readline:读一行
– readlines:读多行(返回为list列表)
fd = open('/tmp/test.txt','a') #打开文件,fd为文件对象
fd.write("test\n") #追加写入
fd.read() #读取整个文件
fd.read(5) #读取5个字符(读取后指针停留在第五个字符后)
fd.readline() #读取一行数据
fd.readlines() #读取多行数据(整个文件,比较占内存,不建议使用)
fd.close() #关闭文件(会自动保存写入内容)
for line in fd: ##建议直接使用fd文件对象遍历,不占用大量内存
print line,
使用with open 打开文件
with open不用关闭文件,执行完自动关闭
语法格式,例
with open('/tmp/test.txt') as fd:
while True:
line = fd.readline()
if not line:
break
print line,
三元表达式
da = x if x > y else y
list = [ x for x in xrange(10)]
例题
统计系统剩余内存
#!/usr/bin/python
# -*- coding:utf-8 -*-
with open('/proc/meminfo') as fd:
for line in fd:
if line.startswith('MemTotal'): ##startswith方法用来判断是否以‘MemTotal’开头
total = line.split()[1] ##split方法用来切割字符串,默认使用空格切割
if line.startswith('MemFree'):
free = line.split()[1]
print "总内存:%.2fM,剩余内存:%.2fM" % (int(total)/1024.0,int(free)/1024.0)
数据类型转换
int(‘10’) ##字符转换为整数(非数字字符转换会报错)
int(‘a’,16) ##十六进制转换为十进制(超出十六进制会报错)
int(‘0xa’,16) ##十六进制转换为十进制
hex(12) ##十进制转换为十六进制
例题:
根据已知mac地址求下个mac地址
#!/usr/bin/python
# -*- coding:utf-8 -*-
macaddr = "00:0C:29:E3:5D:0A"
prefix_mac = macaddr[:-2]
last_two = macaddr[-2:]
plus_one = int(last_two, 16) + 1
if plus_one in range(16):
new_last_two = hex(plus_one)[2:] ##最后的[2:]是去掉十六进制前面的‘0x’标识
new_last_two = '0' + new_last_two
else:
new_last_two = hex(plus_one)[2:]
new_macaddr = prefix_mac + new_last_two
print new_macaddr.upper()
‘’.join(list) #join方法可以把列表或元组转为字符串(前边的‘’表示使用‘’连接列表元素,如果是‘.’则使用‘.’来连接列表各元素)
list(string) #字符串转列表
tuple(string) #字符串转元组
dict.items() #字典转为列表