原文: Reading and Writing Files in Python
概览
在Python中, 读写文件不需要import任何库, 第一步是使用open
函数获取一个文件对象
文件类型
文件通常被分为文本文件
或二进制文件
, 文本文件
通常是由很多行组成的序列(sequence), 而每一行又是很多字符(characters)组成的序列. 每一行由EOL(End Of Line)
终结, 最常见的行终结符是\n
, 又叫换行符. 反斜杠(backslash)表明下一个字符将被当作一个新行(译注: 这里没理解). 基本上不是文本文件的文件就是二进制文件, 二进制文件只能被了解其文件结构的应用处理.
Open()
我们使用内置的open()
函数打开一个文件. open()
返回一个文件对象, 一般会传入两个参数. 语法是:
1
|
|
打开方式(mode)
mode
参数是可以省略的, 缺省条件下为'r'
mode
参数可以是:
- ‘r’, 读文件
- ‘w’, 仅写文件(如果有同名文件会被覆盖)
- ‘a’, 添加文本; 所有写入的内容都会被自动添加到文件末尾
- ‘r+’, 读写文件
1 2 |
|
接下来文件对象函数将被调用. 最常用的两个函数是read
和write
.
创建一个文本文件
让我们先来创建一个新文本文件. 你可以随便给它取名字, 在这个例子中我们叫它newfile.txt
1 2 3 4 |
|
现在我们打开newfile.txt
, 可以看到如下内容:
1 2 3 |
|
如何读文本文件
我们可以用不同的方法来读一个文本文件.
file.read()
如果你想得到一个包含文件中所有字符的字符串, 你可以用file.read()
1 2 |
|
输出:
hello world in the new file
and another line
我们也可以通过使用file.read(n)
来指定字符串应该返回的字符的个数, n
确定了字符个数. 下面这段代码读取文本中的前5个字符并将它们作为字符串返回.
1 2 |
|
输出:
hello
file.readline()
readline()
函数会逐行读取文件(而非一次读取整个文件), 调用readline()
会获取文件第一行, 之后的调用会返回接下来的行. 通常它会从文件读取单行并返回一个包含直到\n
的字符串
1 2 |
|
输出:
hello world in the new file
file.readlines()
readlines()
将整个文件作为一个用\n
分隔的列表返回
1 2 |
|
输出:
['hello world in the new file\n', 'and another line\n']
循环遍历一个文件对象
读取文件的行时, 你可以循环遍历这个文件对象. 这在内存占用上是高效的, 并且写法简单.
1 2 3 |
|
输出:
hello world in the new file
and another line
file.write()
写方法需要一个参数, 待写入的字符串. 写入后如果要换行, 在末尾添加一个\n
1 2 3 4 |
|
close()
当你对文件的操作结束后, 调用f.close()
来关闭它并且释放打开这个文件所占用的系统资源. 调用f.close()
后, 对这个文件的操作都会失败.
文件句柄(file handler)的用法
让我们看看一些使用不同方法的例子
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 29 30 31 32 33 34 35 |
|
with语句
另一种处理文件的方式是with
语句. 使用with
语句是很好的做法. 通过with
语句, 你就有了更好的语法和异常处理.
另外, 它会自动关闭文件. with
语句提供了一种保证资源得到释放的方法.
使用with
打开文件很简单:
1
|
|
让我们来看些例子
1 2 3 |
|
同样地, 你也可以循环遍历文件对象:
1 2 3 |
|
注意, 我们不需要写file.close()
, 它会被自动调用.
使用with
的例子
让我们通过一些例子来看看平常我们可以怎么用到它
用with
写文件
1 2 |
|
逐行读取文件
1 2 |
|
分割行
最后一个例子中, 我们将看到如何从一个文本文件中分割行. split
函数将变量data
中包含的字符串以空格符为分割符分割开. 你也可以根据任何你想要的分割符分割, 例如line.split(':')
会用冒号分割字符串
1 2 3 4 5 6 |
|
输出:
Because multiple values are returned by split, they are returned as an array.
['hello', 'world,', 'how', 'are', 'you', 'today?']
['today', 'is', 'saturday']
扩展阅读
[1] http://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files
[2] http://www.pythonforbeginners.com/cheatsheet/python-file-handling/
[3] http://en.wikibooks.org/wiki/Non-Programmer’s_Tutorial_for_Python_3/
[4] http://chryswoods.com/beginning_python/
译后记
呼, 终于译完了这篇水文…完全新手向的一篇文章, 译完才发现比我以为的要浅好多, 算是复习文件操作吧~