Python文件处理(一)读写文件

本文首先介绍如何利用Python进行文件读写操作,最后通过实例讲解基本用法。

基础知识

打开文件

Python内置了open函数用于打开文件:

1
2
3
4
5
6
file object = open(file_name [, access_mode][, buffering])
参数列表:
file_name:文件名;
access_mode:打开模式,有只读、写入、追加写入等,默认方式为只读;
buffering:文件缓冲,0:不缓冲数据;1:缓冲1行数据;大于1表示缓冲指定行的数据;
access_mode文件打开模式如下:

模式 描述
r 以只读方式打开文件。文件指针处于文件的开头。(默认模式)
rb 以二进制格式打开一个文件用于只读。文件指针处于文件的开头。(默认模式)
r+ 以读写方式打开文件。文件指针处于文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针处于文件的开头。
w 打开一个文件只用于写入。若该文件已存在则将其覆盖,否则创建新文件。
wb 以二进制格式打开一个文件只用于写入。若该文件已存在则将其覆盖,否则创建新文件。
wb+ 以二进制格式打开一个文件用于读写。若该文件已存在则将其覆盖,否则创建新文件。
a 打开一个文件用于追加。若文件已存在,文件指针置于文件结尾。若该文件不存在,创建新文件写入。
ab 以二进制格式打开一个文件用于追加。若文件已存在,文件指针置于文件结尾。若该文件不存在,创建新文件写入。
a+ 打开一个文件用于读写。若文件已存在,文件指针置于文件结尾。若该文件不存在,创建新文件写入。
ab+ 以二进制格式打开一个文件用于追加。若文件已存在,文件指针置于文件结尾。若该文件不存在,创建新文件写入。

打开文件后获得文件对象,文件对象的属性列表如下:

属性 描述
file.closed 文件是否被关闭,true:是;false:否
file.mode 文件被打开的访问模式
file.name 文件名称

关闭文件

不使用的文件对象要使用close()方法及时关闭,文件关闭语法如下:

1
fileObject.close();

读文件

read()方法从打开的文件中读取字符串,语法如下:

1
fileObject.read([count]);

count是要读取的字节数,如果没有传递count参数,则Python会尝试读取尽可能多的内容。
tell()方法显示文件指针当前所处的位置;
seek(offset[, from])方法可以更改当前文件指针位置,参数列表:
offset:要移动的字节数;
from:指定开始移动字节的参考位置,0:文件开头;1:当前位置;2:文件末尾

写文件

write()方法可以将字符串写入打开的文件(注意:write不会自动在字符串结尾添加换行符,需要自己手动添加)

1
fileObject.write(string);

文件重命名

文件重命名和删除文件需要借助os模块,首先要引入os模块:

1
import os

os模块是Python访问操作系统功能的主要接口,它提供的功能主要包括删除/重命名文件、遍历目录树以及管理文件访问权限等。
文件重命名函数rename语法如下:

1
os.rename(current_file_name, new_file_name)

删除文件

同样需要引入os模块,语法如下:

1
os.remove(file_name)

文件目录

os.path模块提供了可以完成管理和操作文件路径名中的各个部分,获取文件或子目录信息,文件路径查询等操作。

  • 创建目录
    在当前目录下创建一个新目录test:

    1
    os.mkdir("test")
  • 切换目录
    从当前目录切换到’/home/test’目录:

    1
    os.chdir("/home/test")
  • 删除目录
    删除目录’test’:

    1
    os.rmdir('test')
  • 获取当前工作目录

    1
    os.getcwd()
  • 遍历目录

    1
    cwd = os.getcwd()
    os.listdir(cwd)
  • 获取文件名
    去掉目录路径,返回文件名:

    1
    os.path.basename(path)
  • 获取文件路径
    去掉文件名,返回目录路径:

    1
    os.path.dirname(path)

实战

目标:读取文档weixin.txt,添加适当内容后写入文档result.txt。
weixin.txt文档部分内容如下:

1
-1	系统繁忙
0	请求成功
40001	获取access_token时Secret错误,或者access_token无效
40002	不合法的凭证类型
40003	不合法的UserID
40004	不合法的媒体文件类型
40005	不合法的文件类型
40006	不合法的文件大小
40007	不合法的媒体文件id
40008	不合法的消息类型
40013	不合法的corpid
40014	不合法的access_token
40015	不合法的菜单类型
40016	不合法的按钮个数
40017	不合法的按钮类型
40018	不合法的按钮名字长度
40019	不合法的按钮KEY长度
40020	不合法的按钮URL长度
40021	不合法的菜单版本号
...

  • 读文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    '''
    Created on 2016/1/12
    @filename: main.py
    @author: yurixu
    @des: Python读写文件
    '''

    f = open('weixin.txt', 'r')

    def main():
    #python 按行读取文件
    for i in f:
    print i

    if __name__=="__main__":
    main()
    f.close()

输出的文件内容为乱码:

1
43010   闇€瑕佸浜庡洖璋冩ā寮?

43011   闇€瑕佷紒涓氭巿鏉?

43013   搴旂敤瀵规垚鍛樹笉鍙

44001   澶氬獟浣撴枃浠朵负绌?

44002   POST鐨勬暟鎹寘涓虹┖

44003   鍥炬枃娑堟伅鍐呭涓虹┖

44004   鏂囨湰娑堟伅鍐呭涓虹┖

乱码原因:源文件weixin.txt编码格式为UTF-8,Windows本地默认编码格式为GBK,所以直接在控制台打印输出字符串就会产生乱码。
解决方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Created on 2016/1/12
@filename: main.py
@author: yurixu
@des: Python读写文件
'''

import sys

#获取当前系统编码
type = sys.getfilesystemencoding()
f = open('weixin.txt', 'r')

def main():
#python 按行读取文件
for i in f:
print i.decode("UTF-8").encode(type)

if __name__=="__main__":
main()
f.close()

输出:

1
43006   需要订阅

43007   需要授权

43008   需要支付授权

43010   需要处于回调模式

43011   需要企业授权

43013   应用对成员不可见

  • 写文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    '''
    Created on 2016/1/12
    @filename: main.py
    @author: yurixu
    @des: Python读写文件
    '''

    import sys

    type = sys.getfilesystemencoding()
    f = open('weixin.txt', 'r')
    w = open('result.txt', 'w')

    def main():
    #python 按行读取文件
    for i in f:
    a = i.decode("UTF-8").encode(type)
    #python 分割字符串
    b = a.split()
    #python 拼接字符串
    w.write("'"+b[0]+"'"+" => "+"'"+b[1]+"',")
    w.write('\n')

    if __name__=="__main__":
    main()
    f.close()
    w.close()

weixin.txt每行包含两列内容:errCode和errMsg,写入文件前需要对两列分别处理,所以需要使用split方法进行字符串分割,生成元组b,再对元组各元素进行字符拼接。由于write方法不自动添加换行符,所以在每行结尾要手动添加换行符\n,在main结束后关闭文件。
最终写入的文件内容:

1
'?-1' => '系统繁忙',
'0' => '请求成功',
'40001' => '获取access_token时Secret错误,或者access_token无效',
'40002' => '不合法的凭证类型',
'40003' => '不合法的UserID',
'40004' => '不合法的媒体文件类型',
'40005' => '不合法的文件类型',
'40006' => '不合法的文件大小',
'40007' => '不合法的媒体文件id',
'40008' => '不合法的消息类型',
'40013' => '不合法的corpid',
...

生成的result.txt可以直接拿来添加array头尾,放置到Yii配置文件中使用。
Python简单读写文件就介绍到这里,关于Python如何读写Excel文件,我将在Python文件处理(二)读写Excel文件中介绍。

—- 完结 —-

分享 本文总阅读量
< !-- add by yurixu 替换Google的jquery并且添加判断逻辑 -->