python文件操作

open

r:以读方式打开

w:以写方式打开

a:以追加模式

r+:读写模式

w+:读写模式(参见w)

a+:读写模式(参见a)

rb:以二进制读模式打开

wb:以二进制写模式打开(参见w)

ab:以二进制追加模式打开(参见a)

rb+:以二进制读写模式打开(参见r+)

wb+:以二进制读写模式打开(参见w+)

ab+:以二进制读写模式打开(参见a+)

with open

In [34]: type(fd.read())   fd.read()是字符串类型
Out[34]: str
In [30]: cat /tmp/tmp.txt
aa456
In [31]: fd=open('/tmp/tmp.txt')  

In [32]: fd.read(2)  读2个字符
Out[32]: 'aa' 

In [33]: fd.read()  没有数字,代表从当前位置读到结尾
Out[33]: '456'


使用for循环遍历文件

打开文件

[root@localhost ~]# vim forread.py
#!/usr/bin/python
fd=open('/tmp/tmp.txt')
for line in fd:    #或者使用for line in fd.readlines(): readlines()创建的按行的列表,文件如果是1G,占用内存大
    print line,  #使用,
[root@localhost ~]# python forread.py 
daviddavid1
david2
david3


使用while循环遍历文件

打开文件

[root@localhost ~]# vim whileread.py 
#!/usr/bin/python
fd = open('/tmp/tmp.txt')
while True:
    line = fd.readline()
    if not line:
        break
    print line,
fd.close()
[root@localhost ~]# python whileread.py 
daviddavid1
david2
david3

#使用with open(/bath/file) as fd,会自动调用fd.close(),with open下面的代码需要关键字,属于循环内容
[root@localhost ~]# vim whileread.py 
#!/usr/bin/python
with open('/tmp/tmp.txt') as fd:
    while True:
        line = fd.readline()
        if not line:
            break
        print line,
[root@localhost ~]# python whileread.py 
daviddavid1
david2
david3


打印mem total和mem free,使用startswith(a)判断字符串开头字母为a,返回true,否则返回false,split()分割字符串

[root@localhost ~]# cat /proc/meminfo 
MemTotal:         502092 kB
MemFree:           10656 kB
Buffers:          131744 kB
Cached:           236908 kB
SwapCached:           64 kB
[root@localhost ~]# vim memory.py
#!/usr/bin/python
with open ('/proc/meminfo') as fd:
    for line in fd:
        if line.startswith('MemTotal'):
            total=line.split()[1]
        if line.startswith('MemFree'):
            free=line.split()[1]
print total,free
[root@localhost ~]# python memory.py
502092 9156