Python读取和写入文件
1 从文件中读取数据
1.1 读取整个文件
创建名为test的txt文本文件,添加内容如下所示:
1234567890
2345678901
3456789012
实现代码:
1 with open(\'test.txt\') as file_object: 2 contents = file_object.read() 3 print(contents)
运行结果:
工作原理:
#1 open()方法用于打开一个文件:输入参数—文件名称(默认在当前目录中查找);返回一个表示文件的对象。
#1 关键字with:打开文件后,Python会在合适的时候将打开的文件自动关闭,避免造成不必要的麻烦。
#2 read()方法:读取文件的全部内容,并将其作为一个长字符串存储在变量contents中。
#3 打印存储在变量contents中的内容。
打印结果与原始文件相比,末尾处出现一个空行。这是因为read()方法到达文件末尾时会返回一个空字符串,而将这个空字符串显示出来时就是一个空行。
要删除多余出来的空行,可使用rstrip()函数(删除字符串末尾空白):
1 with open(\'test.txt\') as file_object: 2 contents = file_object.read() 3 print(contents.rstrip())
运行结果:
1.2 文件路径
默认情况下,read()方法只会在当前目录中进行查找文件,不会在其子文件夹中查找。
如果要打开一个不在当前目录中的文件,则需要提供该文件路径,以便Python在特定路径去查找该文件。
有两种提供文件路径的方法:相对文件路径和绝对文件路径。
例如,假设Python源文件位于名为work的文件夹中,txt文件位于work的子文件夹files中。
这种情况下,我们可以提供相对文件路径来打开该文件夹中的文件:
1 with open(\'files\test.txt\') as file_object:
此外,你也可以提供绝对文件路径来打开该文件夹中的文件:
1 with open(\'...\work\files\test.txt\') as file_object:
当绝对文件路径比较长时,可以先将其存储在一个变量中,如file_path:
1 file_path = \'...\work\files\test.txt\' 2 with open(file_path) as file_object:
1.3 逐行读取
实现代码:
1 filename = \'test.txt\' 2 3 with open(filename) as file_object: 4 for line in file_object: 5 print(line)
运行结果:
运行后发现每行文本之后都有空行,原因是:1. 文件中每行末尾都有一个看不见的换行符;2. print语句也会加上一个换行符。
因此每行文本后面都会跟随两个换行符:一个来自文件;一个来自print语句。
同样地,要消除这些空白行,可以在print语句中加入rstrip():
1 filename = \'test.txt\' 2 3 with open(filename) as file_object: 4 for line in file_object: 5 print(line.rstrip())
运行结果:
1.4 创建一个包含文件各行内容的列表
使用关键字with时,open()返回的文件对象只在with代码块内可用。
若要在with代码块之外访问文件内容,可在with代码块内将文件的各行内容存储在一个列表中,并在with代码块外使用该列表。
实现代码:
1 filename = \'test.txt\' 2 3 with open(filename) as file_object: 4 lines = file_object.readlines() 5 6 for line in lines: 7 print(line.rstrip())
运行结果:
工作原理:
#4 readlines()从文件中读取每一行,并将其存储在一个列表中,再传递给变量lines。
当文件内容被读取到内存后,你就可以以任何方式使用这些数据了。
2 写入数据到文件中
2.1 写入空文件
要将文本写入文件,需要在调用open()时提供另一个实参,以告知Python你要写入打开的文件。
实现代码:
1 filename = \'test.txt\' 2 3 with open(filename, \'w\') as file_object: 4 file_object.write("Hello World!")
工作原理:
#3 open()提供了两个参数:1. 打开文件名称;2. \’w\’告知Python以写入模式打开文件。
#4 write()方法将一个字符串写入文件。
[注1]:\’r\’表示只读模式,\’a\’表示附加模式,\’r+\’表示读取和写入模式。若省略此实参,Python将以默认的只读模式打开文件。
[注2]:若要写入的文件不存在,open()函数将自动创建它。
[注3]:千万小心,若指定文件已存在,Python将在返回文件对象之前清空该文件。
2.2 写入多行
函数write()不会在你写入的文本末尾添加换行符,因此,如果你写入多行时没有指定换行符,文件看起来可能不会那么的井然有序。
要让每个字符串单独占据一行,可以在write()语句中包含换行符。
实现代码:
1 filename = \'test.txt\' 2 3 with open(filename, \'w\') as file_object: 4 file_object.write("Hello World!\n") 5 file_object.write("my great friends.\n")
当然,你还可以使用空格、制表符和空行等来设置写入文本的格式。
2.3 附加到文件
如果你要给文件添加内容,而不是覆盖原有的内容,可以附加模式打开文件。
当你以附加模式打开文件时,Python不会在返回文件对象前清空文件,而你写入到文件的行都将添加到文件末尾。
如果指定的文件不存在,Python将为你创建一个空文件。
实现代码:
1 filename = \'test.txt\' 2 3 with open(filename, \'a\') as file_object: 4 file_object.write("Python\n") 5 file_object.write("Java\n")
运行结果: