循环遍历文件

使用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() #字典转为列表