文件操作
基本操作
python内置函数open()
进行文件操作,默认使用r
方式打开文件。
操作示例1
2
3fd = open(‘/tmp/tmp.txt’,’w’)
fd.write(“123”)
fd.close()
其他打开方式1
2
3
4
5
6
7
8
9
10
11
12r 读方式打开(文件不存在报错)
w 写方式打开(文件不存在会新建,存在会被覆盖)
a 追加模式(文件不存在会创建)
r+ 读写模式打开
w+ 读写模式打开
a+ 读写模式打开
rb 二进制读模式
wb 二进制写模式
ab 二进制追加模式
rb+ 二进制读写模式打开
wb+ 二进制读写模式打开
ab+ 二进制读写模式打开
w
方式打开文件,原文件将被覆盖1
2
3
4
5In [11]: fd = open('/root/aming/tmp.txt','w')
In [12]: fd.write('1234\n')
In [13]: fd.close()
a
方式打开文件,追加1
2
3
4
5In [14]: fd = open('/root/aming/tmp.txt','a')
In [16]: fd.write('5678\n')
In [17]: fd.close()
文件读取方法
- fd.read() 返回字符串
- fd.readline() 返回字符串
- fd.readlines() 返回列表
fd.read()
返回字符串,读取文件所有内容,再次读取时返回空1
2
3
4
5
6
7
8
9In [20]: fd = open('/root/aming/tmp.txt')
In [21]: fd.read()
Out[21]: '1234\n5678\n'
In [22]: fd.read()
Out[22]: ''
In [23]: fd.close()
fd.readline()
返回字符串,按行顺序读取1
2
3
4
5
6
7
8
9
10
11
12In [24]: fd = open('/root/aming/tmp.txt')
In [25]: fd.readline()
Out[25]: '1234\n'
In [26]: fd.readline()
Out[26]: '5678\n'
In [27]: fd.readline()
Out[27]: ''
In [28]: fd.close()
fd.readlines()
返回列表1
2
3
4
5
6In [29]: fd = open('/root/aming/tmp.txt')
In [30]: fd.readlines()
Out[30]: ['1234\n', '5678\n']
In [31]: fd.close()
文件遍历
for循环遍历文件
1 | fd = open('/root/aming/tmp.txt') |
读取方式有2种,分别为for line in fd.realines()
for line in fd
对于大文件进行遍历,建议使用第二种方法,第一种会创建列表,需要占用大量内存;第二种则不会。
while循环遍历文件
1 | fd = open('/root/aming/tmp.txt') |
执行结果1
21234
5678
with open 用法示例
使用此方式打开文件,不用再次调用fd.close()关闭。1
2
3
4
5
6with open('/root/aming/tmp.txt') as fd:
while True:
line = fd.readline()
if not line:
break
print line,
执行结果1
21234
5678
示例
统计系统free内存和所占百分比1
2
3
4
5
6
7
8
9
10
11with open('/proc/meminfo') as fd:
for free in fd:
if free.startswith('MemTotal'):
total = free.split()[1]
continue
if free.startswith('MemFree'):
free = free.split()[1]
break
print "%.2f" %(int(free)/1024.0)+'M'
print "%.2f" %(int(total)/1024.0)+'M'
print "%.2f" %(int(free)/float(total))+'%'
输出结果1
2
3557.22M
1862.21M
0.30%
类型转换
数据类型转换
16进制转换为10进制1
2In [1]: int('a',16)
Out[1]: 10
10进制转换为16进制1
2In [2]: hex(10)
Out[2]: '0xa'
10进制转换为字符串1
2In [3]: str(10)
Out[3]: '10'
字符串转换为10进制1
2In [4]: int('10')
Out[4]: 10
示例
计算MAC地址,已知当前MAC地址,计算下一个MAC地址1
2
3
4
5
6
7
8
9
10
11
12
13macaddr = '00:0C:29:A5:62:0A'
prefix_mac = macaddr[:-3]
last_two = macaddr[-2:]
plus_one = int(last_two, 16) + 1
if plus_one in range(10):
new_last_two = hex(plus_one)[2:]
new_last_two = '0' + new_last_two
else:
new_last_two = hex(plus_one)[2:]
if len(new_last_two) == 1:
new_last_two = '0' + new_last_two
new_mac = prefix_mac + ':' + new_last_two
print new_mac.upper()
执行结果1
00:0C:29:A5:62:0B
元组字典列表转换
字符串转换为列表 list()1
2
3
4
5
6In [16]: s = 'abc'
In [17]: l = list(s)
In [18]: l
Out[18]: ['a', 'b', 'c']
列表转换为字符串 ‘’.join()1
2
3
4
5In [18]: l
Out[18]: ['a', 'b', 'c']
In [19]: ''.join(l)
Out[19]: 'abc'
字符串转换为元组 tuple()1
2
3
4
5
6In [20]: s = 'abc'
In [21]: t = tuple(s)
In [22]: t
Out[22]: ('a', 'b', 'c')
元组转换为字符串 ‘’.join()1
2
3
4
5In [22]: t
Out[22]: ('a', 'b', 'c')
In [23]: ''.join(t)
Out[23]: 'abc'
列表转换为元组 tuple()1
2
3
4
5In [24]: l
Out[24]: ['a', 'b', 'c']
In [25]: tuple(l)
Out[25]: ('a', 'b', 'c')
元组转换为列表 list()1
2
3
4
5In [26]: t
Out[26]: ('a', 'b', 'c')
In [27]: list(t)
Out[27]: ['a', 'b', 'c']
字典转换为列表 字典的items()方法1
2
3
4In [28]: dic = {'a' : 1, 'b' : 2}
In [29]: dic.items()
Out[29]: [('a', 1), ('b', 2)]
列表转换为字典 dict()1
2
3
4
5In [32]: l1
Out[32]: [('a', 1), ('b', 2)]
In [33]: dict(l1)
Out[33]: {'a': 1, 'b': 2}