python文件及数据类型转换

文件操作

基本操作

python内置函数open()进行文件操作,默认使用r方式打开文件。

操作示例

1
2
3
fd = open(‘/tmp/tmp.txt’,’w’)
fd.write(“123”)
fd.close()

其他打开方式

1
2
3
4
5
6
7
8
9
10
11
12
r    读方式打开(文件不存在报错)
w 写方式打开(文件不存在会新建,存在会被覆盖)
a 追加模式(文件不存在会创建)
r+ 读写模式打开
w+ 读写模式打开
a+ 读写模式打开
rb 二进制读模式
wb 二进制写模式
ab 二进制追加模式
rb+ 二进制读写模式打开
wb+ 二进制读写模式打开
ab+ 二进制读写模式打开

w方式打开文件,原文件将被覆盖

1
2
3
4
5
In [11]: fd = open('/root/aming/tmp.txt','w')

In [12]: fd.write('1234\n')

In [13]: fd.close()

a方式打开文件,追加

1
2
3
4
5
In [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
9
In [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
12
In [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
6
In [29]: fd = open('/root/aming/tmp.txt')

In [30]: fd.readlines()
Out[30]: ['1234\n', '5678\n']

In [31]: fd.close()

文件遍历

for循环遍历文件

1
2
3
4
5
fd = open('/root/aming/tmp.txt')
#for line in fd.readlines():
for line in fd:
print line,
fd.close()

读取方式有2种,分别为
for line in fd.realines()
for line in fd
对于大文件进行遍历,建议使用第二种方法,第一种会创建列表,需要占用大量内存;第二种则不会。

while循环遍历文件

1
2
3
4
5
6
7
fd = open('/root/aming/tmp.txt')
while True:
line = fd.readline()
if not line:
break
print line,
fd.close()

执行结果

1
2
1234
5678

with open 用法示例

使用此方式打开文件,不用再次调用fd.close()关闭。

1
2
3
4
5
6
with open('/root/aming/tmp.txt') as fd:
while True:
line = fd.readline()
if not line:
break
print line,

执行结果

1
2
1234
5678

示例

统计系统free内存和所占百分比

1
2
3
4
5
6
7
8
9
10
11
with 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
3
557.22M
1862.21M
0.30%

类型转换

数据类型转换

16进制转换为10进制

1
2
In [1]: int('a',16)
Out[1]: 10

10进制转换为16进制

1
2
In [2]: hex(10)
Out[2]: '0xa'

10进制转换为字符串

1
2
In [3]: str(10)
Out[3]: '10'

字符串转换为10进制

1
2
In [4]: int('10')
Out[4]: 10

示例

计算MAC地址,已知当前MAC地址,计算下一个MAC地址

1
2
3
4
5
6
7
8
9
10
11
12
13
macaddr = '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
6
In [16]: s = 'abc'

In [17]: l = list(s)

In [18]: l
Out[18]: ['a', 'b', 'c']

列表转换为字符串 ‘’.join()

1
2
3
4
5
In [18]: l
Out[18]: ['a', 'b', 'c']

In [19]: ''.join(l)
Out[19]: 'abc'

字符串转换为元组 tuple()

1
2
3
4
5
6
In [20]: s = 'abc'

In [21]: t = tuple(s)

In [22]: t
Out[22]: ('a', 'b', 'c')

元组转换为字符串 ‘’.join()

1
2
3
4
5
In [22]: t
Out[22]: ('a', 'b', 'c')

In [23]: ''.join(t)
Out[23]: 'abc'

列表转换为元组 tuple()

1
2
3
4
5
In [24]: l
Out[24]: ['a', 'b', 'c']

In [25]: tuple(l)
Out[25]: ('a', 'b', 'c')

元组转换为列表 list()

1
2
3
4
5
In [26]: t
Out[26]: ('a', 'b', 'c')

In [27]: list(t)
Out[27]: ['a', 'b', 'c']

字典转换为列表 字典的items()方法

1
2
3
4
In [28]: dic = {'a' : 1, 'b' : 2}

In [29]: dic.items()
Out[29]: [('a', 1), ('b', 2)]

列表转换为字典 dict()

1
2
3
4
5
In [32]: l1
Out[32]: [('a', 1), ('b', 2)]

In [33]: dict(l1)
Out[33]: {'a': 1, 'b': 2}

Recommended Posts