Python学习笔记之文件处理

1、打开和关闭

要打开文件可以使用函数 open(),它位于自动导入模块 io 中

函数将文件名作为唯一不可缺少的参数,并返回一个文件对象

它还有一个名叫 mode 的参数,用于指定文件模式,其可取值如下:

描述
'r' 读取模式(默认值)
'w' 写入模式,当文件不存在时创建它,当文件存在时清除原有内容
'x' 独占写入模式,当文件不存在时创建它,当文件存在时引发异常
'a' 附加模式,在既有文件末尾继续写入
'b' 二进制模式(与其它模式结合使用)
't' 文本模式(默认值,与其它模式结合使用)
'+' 读写模式(与其它模式结合使用)

要关闭文件可以使用函数 close(),在把数据写入文件后,若没有正确关闭文件,则很可能不能成功地写入数据

为此,Python 提供了一种更加简便的方法,with 语句。当使用 with 语句打开文件时,将自动关闭文件

>>> with open('fileName') as f:
pass

2、读取和写入

首先要明白,在文本模式和二进制模式下,Python 分别将 str 和 bytes 作为文件传输的基本数据类型

(1)按字符或字节读写

如果有一个名为 f 的文件对象,那么我们可以用 f.write() 来写入数据

>>> f = open('testFile.txt','w') # 当没有指定 b 或 t 时,默认为 t
>>> f.write('Hello, ')
# 7
>>> f.write('World')
# 5
>>> # 还没有使用 f.close 关闭文件时,文件中没有写入任何内容
>>> f.close()

读取也同样简单,使用 f.read() 方法即可

在文本模式下需要说明读取多少个字符,在二进制模式下需要说明读取多少个字节

>>> f = open('testFile.txt') # 当不指定模式时,默认为 rt
>>> f.read(2)
# 'He'
>>> f.read() # 不提供参数时,读取余下的全部内容
# 'llo, World'

(2)按行读写

对于按行读取文件,我们可以使用方法 readline()

当不提供任何参数时,读取一行并返回,当提供一个非负整数时,读取指定字符数并返回

如果希望读取文件中所有行,并以列表的方式返回它们,可以使用方法 readlines()

对于写入文件,方法 writelines() 和方法 readlines() 相反,其接收一个字符串列表,并将这些字符串写入文件中

注意,写入时并不会自动添加换行符,因此必须自行添加,另外,不存在方法 `writeline()``

>>> f = open('testFile.txt','w')
>>> f.writelines(['I\n','Love\n','Python\n'])
>>> f.close()
>>> f = open('testFile.txt','r')
>>> f.readline()
# 'I\n'
>>> f.readlines()
# ['Love\n', 'Python\n']

(3)迭代文件对象

① 每次一个字符或字节

with open(fileName) as f:
while True:
char = f.read(1)
if not char: break
process(char)

② 每次一行

with open(fileName) as f:
while True:
line = f.readline()
if not line: break
process(line)

③ 文件迭代器

with open(fileName) as f:
for line in f:
process(line)

3、随机存储

在之前的做法中,我们将文件视为流,只能按顺序从头到尾读取

实际上,读写可以在任意位置进行,这称为随机存储。为此,可以使用文件对象的两个方法:seektell

方法 seek(offest[, whence]) 将当前位置移到 offest 和 whence 指定的位置

参数 offest 指定偏移字符或字节数,参数 whence 指定偏移的初始位置,它的取值有三个:

默认为文件开头 io.SEEK_SET(0),可以是当前位置 io.SEEK_CUR(1),可以是文件末尾 io.SEEK_END(2)

方法 tell() 返回文件当前位置

>>> f = open('testFile.txt','w')
>>> f.write('01234567890123456789')
# 20
>>> f.seek(5)
# 5
>>> f.write('Hello World')
# 11
>>> f.close()
>>> f = open('testFile.txt','r')
>>> f.read()
# '01234Hello World6789'
>>> f.close()

【 阅读更多 Python 系列文章,请看 Python学习笔记

上一篇:python学习笔记(7)文件的访问与函数式编程


下一篇:转载-python学习笔记之文件I/O