1、文本操作
在python中文件的打开可以调用open(‘file path’,’mode’)方法,该方法类似于java中和文件建立管道,其中file path 为文件的绝对路径名,mode为方式,常用的方式有以下几种:
(1) ’r’表示只能读取,如果文件不存在,那么将会新建文件
(2) ’w'表示只能写入,如果文件不存在,那么将会新建文件
(3) ‘r+’表示同时允许写入和读取,
(4) ’U’表示文本中会将\r,\n,\r\n 都识别为一行的结束,注意U需要大写,否则将不会成功,并且使用小写的u系统也不会提示错误。这个模式在 linux系统下处理csv文件可能会很有用处,因为在 linux中,’;’ 用来分隔列,而’\r'用来分隔行
另外有几个常用而且便利的方法会经常用到,如果想了解有多少函数python可以用来操作文件,可以使用help(file)命令查看:
(1)read()
该方法把整个文件读入到单一的字符串中,此时文件位置将偏移到文档的末尾
(2)readline()
该方法把文件的一行读入到单一的字符串中,注意如果选择模式为’r’,那么文件的行间隔符号为’\n’,如果选择模式为’U’,那么文件的行间隔符号可以为’\r’,’\n’,’\r\n’,调用后文件位置将偏移到文档的下一行开头
(3)readlines()
该方法把整个文件都读入到字符串列表中
(4)write()
该方法将字符串写入到文件中,注意如果模式中没有’a’那么字符串将会从文件位置复写入文件,而且无法撤回,因此写文件之前要确定是需要覆写,还是在文档最后添加
(5)writelines()
该方法将列表中的字符串写入文件
(6)seek()
该方法需要传入一个正整数,将当前的文件偏移位置移动到正整数所在的文件位置
(7)close()
关闭与文件之间的操作流
(8)flush()
将写入文件缓冲区的字符刷新到文件中
2、文件读取的最佳实践
一般读取文件并进行操作,使用的方法大多如下:
for line in open(’script.py’,’r+’).readlines():
print(line,end=‘ ‘)
但是调用readline()方法读取文件将会首先一次性将文件读入内存,如果文件数据量非常大,可能会导致内存不够无法运行。因此当预测需要操作的文件比较大时,比较好的处理方式,不是读取文件而是使用内部的迭代器操作,代码如下:
for line in open(’script.py’,’r+’):
print(line,end=‘ ')
上述程序将会逐行读取文件,但是并没有刻意从文件中读取内容。
但是如果能预测到将要操作的文件数据量较小,那么建议使用readlines() 方法将数据先全部读入内存,这样运行速度比使用文件迭代器要快许多。
3、文件操作csv文件
实际应用时,往往会涉及到操作特定格式的文件,例如csv、json等,为方便使用python内部都会有读写相应文件格式的模块,通过import csv、import json等就可以将此模块导入。这里需要提醒注意的是,python 内置的csv模块并不好用,比如一个简单读写csv文件的例子如下所示,通过writerow 方法写入如下,但是写入的内容并不会分列,而是写在同一列中,因此不建议使用。
# coding: utf-8
import csv
csvfile = file('xuefeng_test.csv', 'wb')
writer = csv.writer(csvfile)
writer.writerow(['姓名', '年龄', '电话'])
data = [
('xuefeng', '25', '1234567'),
('xiaoqiang', '18', '789456')
]
writer.writerows(data)
csvfile.close()