目录
从文件读取数据有两种方式:(1)一次性读取整个文件的全部内容;(2)以每次一行的方式逐步读取。
1、读取整个文件
假设有一个文本文件,包含精确到小数点后30位的圆周率值,且在小数点后每10位处换行,命名为:pi_digits.txt。下边示例是打开并读取这个文件,再将其内容显示到屏幕上:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
with open('pi_digits.txt') as file_object:
contents = file_object.read()
print(contents)
运行结果:
代码分析读取文件方法:
open()函数:
扫描二维码关注公众号,回复: 4274403 查看本文章
- 用来打开文件,必须的操作,因为以任何方式使用文件,必须得打开文件,这样才能访问文件。
- open()函数接受一个参数:打开的文件的名称。
- open()函数返回一个表示文件的对象,需要将其存储在一个变量中
关键字with:
- 关键字with的作为是在不再需要访问文件后将其自动关闭,同close()函数作用相同。
- close()函数需要手动关闭文件,可能会出现一些问题。使用with关键字,使得我们只管打开文件,在需要时候使用文件,Python会在合适的时候自动将其关闭。
read()函数:
- read()函数读取文件全部内容(整个文件),并将其作为一个长长的字符串存储在变量contents变量中。
输出空行:
- 输出时,会多一个空行,因为read()达到末尾时返回一个空字符串,这个空字符串显示出来就是一个空行。要删除末尾的空行,可以使用先前介绍的rstrip()函数来删除。(如下代码所示)
删除空行
#!/usr/bin/env python
# -*- coding:utf-8 -*-
with open('pi_digits.txt') as file_object:
contents = file_object.read()
print(contents.rstrip()) # 删除空行
运行结果:
2、文件路径
如果文件和执行程序的文件在同一个目录中,则只需向open()函数传递文件名即可。但若需要打开的文件与执行程序不在同一个目录中,则在调用open()函数时,需要传递需要打开文件的具体路径。
区分是否在同一目录,只需看两个的目录信息,只有完全相同,才能算是在同一个目录,否则就是不在同一个目录。
Windows系统中,在文件路径中使用反斜杠(\)而不是使用斜杠(/)
文件路径有相对路径和绝对路径之分:
- 相对路径:假设上述代码在python_work中,文本文件pi_digits.txt在python_work中的一名为text_file中,则可以使用“text_file\pi_digits.txt”来作为参数传递给open函数,这就叫相对路径
- 绝对路径:就是文件的完整代码,这种路径最靠谱,一般不会出错,实际应用中,可以考虑使用此种路径。绝对路径相对比较长,因此可以将其存储在一个变量中,再将变量传递给open()函数。如下所示:
file_path = ‘C:\Users\ehmatthes\other_file\text_file\filename.txt’
with open(file_path) as file_object:
3、逐行读取文件
要以每次一行的方式读取文件,可对文件对象使用for循环:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
with open('pi_digits.txt') as file_object:
for line in file_object:
print(line.rstrip()) # 同样会有空白行,使用rstrip删除空白行
运行结果:
4、创建包含文件各行内容的列表并使用它
使用关键字with时,open()返回的文件对象只在with代码块内使用。如果要在with代码块外访问文件的内容,可在with代码块内将文件的各行存储在一个列表中。
下边例子,创建一个列表存储文件对象,创建一个字符串,包含文件中存储的所有数字,且没有任何空格:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
with open('pi_digits.txt') as file_object:
lines = file_object.readlines() # 读取每一行,并存储在lines列表中
pi_string = ''
pi_string1 = ''
for line in lines:
pi_string += line.rstrip() # 删除空行,但并未删除左边的空格
pi_string1 += line.strip() # 删除空行和空格
print(pi_string)
print('pi_string长度为:' + str(len(pi_string)))
print(pi_string1)
print('pi_string1长度为:' + str(len(pi_string1)))
运行结果:
!!!注意:读取文本文件,Python将其中的所有文本都解读为字符串。如果读取的是数字,并要将其作为数值使用,就必须使用函数int()或float()将其转换为数值。