11月23日python笔记(python基础2.6-3.0)

2.6 使用for循环遍历文件
打开文件: 需要借助内置函数open()
open(...)
open(name[, mode[, buffering]]) -> file object name:文件名 mode 打开方式(读写、二进制等)

Open a file using the file() type, returns a file object.  This is the
preferred way to open a file.  See file.__doc__ for further information.

以open()内置函数打开的文件返回的是一个文件对象

 •open
r:以读方式打开  只能读,不能改写,文件不存在会报错
w :以写方式打开   文件不存在会创建文件,小心操作,会更改文件内容
a :以追加模式   文件存在,在文件后追加,文件不存在则创建
   主要使用 r,w,a三种
r+ :以读写模式打开
w+:以读写模式打开 (参见 w )
a+:以读写模式打开 (参见 a )
rb:以二进制读模式打开
wb:以二进制写模式打开 (参见 w )
ab:以二进制追加模式打开 (参见 a )
rb+:以二进制读写模式打开 (参见 r+ )
wb+:以二进制读写模式打开 (参见 w+ )
ab+: 以二进制读写模式打开 (参见 a+)

•with open

fd = open('/tmp/1.sh')
<open file '/tmp/1.sh', mode 'r' at 0x13f3c00> 返回的是一个在内存里的文件对象
type(fd)
file fd是一个file类型

In [7]: fd. 文件对象的方法
fd.close fd.errors fd.isatty fd.newlines fd.readinto fd.seek fd.truncate fd.xreadlines
fd.closed fd.fileno fd.mode fd.next fd.readline fd.softspace fd.write
fd.encoding fd.flush fd.name fd.read fd.readlines fd.tell fd.writelines

close() 关闭文件

fd = open('/tmp/1.sh','w') 以w方式打开文件
fd.write("a") 对文件写入 write方法只能写入字符串,而且原文件内容会消失 write方法只接受字符串
write完成后必须使用 close()方法关闭文件,写入才会生效

fd.read() 把文件内容读一遍,读完之后指针找到文件的最后,再次read(),则读取不到内容了,将返回一个空的字符串
read(2) 表示读2个字符

fd.readline() 每次执行读取一行
fd.readlines() 一次性读取所有行,返回的是一个list列表
fd.readlines()
['123\n', '43\n', '5\n', '1\n'] 返回列表

使用for循环遍历文件
#!/usr/bin/python
fd=open('/tmp/1.sh')
for line in fd.readlines():
print line,

问题,如果文件很大,则内存开销会很大
优化写法 for line in fd: 这样的话他遍历的是一个对象,而不是打开一个大的列表
fd.next() 方法

2.7 使用while循环遍历文件
#!/usr/bin/python

fd=open('/tmp/1.sh')
while True:
line=fd.readline()
if not line: 如果读到空行,if 空行就是flase not false就是true 然后执行break
break
print line,

使用with open 使用with open不用close文件(python2.6以后才支持)
with open('/tmp/1.sh') as fd:
while True:
line=fd.readline()
if not line:
break
print line,

2.8 统计系统剩余的内存
统计系统中可用的内存

cat /proc/meminfo 内存使用在/proc/meminfo文件中,其中第一第二行
MemTotal: 999936 kB 总的内存
MemFree: 697388 kB 剩余内存

脚本思路,通过对这个文件做一个遍历,然后使用startswith()方法 查找以固定字符串开头的行,然后使用split()方法切割行取出需要的值

#!/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] 切割这一行的字符串,取出total的值
continue 遍历第一行的时候找到了 continue退出本次循环,优化程序
if line.startswith('MemFree'):
free=line.split()[1]
break 如果已经全部找到了,则退出for循环,优化程序
print "%.2fMB" % (int(free)/1024.0) 格式化输出

2.9 数据类型转换(计算mac地址)
python数据类型有:数值型 字符串型 列表 元组 字典 各个数据类型之间是可以转换的\

一、十六进制字符串转为十进制
int(‘12' ,16)
18
int('0x12' ,16)
18
二、十进制转为十六进制
hex(10)
'0xa‘
注意:字符串之间是无法进行运算的,只有数字之间才能进行算术计算

十进制转为字符串
str(10)
'10'

字符串转为十进制
int('10')

例子:计算网卡mac地址的下一个地址 也就是00:0c:29:f5:20:7c 7c+1 比如服务器上有多个地址 mac地址基本都是连续着的
脚本实现
#!/usr/bin/python

macaddr = '00:0c:29:f5:20:7c'
prefix_mac=macaddr[:-3]
last_two = macaddr[-2:]
plus_one=int(last_two,16)+1
new_last_two=hex(plus_one)[2:]
new_mac=prefix_mac + ':' + new_last_two
print new_mac

3.0 数据类型转换(列表与字典相互转换)

•字符串转列表
list(string)
•列表转字符串
''.join(list) ''代表转换成字符串后以什么作为分隔
•字符串转元组
tuple(string)
•元组转字符串
''.join(tuple)
元祖转列表,列表转元组
list(tuple) tuple(list)
•列表与元组互相转换
•字典转换成列表
字典的items()方法
•列表转为字典

  • dict()

猜你喜欢

转载自blog.51cto.com/4833797/2321778