《Python编程从入门到实践》记录之读取文件

目录

1、读取整个文件

2、文件路径

3、逐行读取文件

4、创建包含文件各行内容的列表并使用它


从文件读取数据有两种方式:(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()函数:

  • 用来打开文件,必须的操作,因为以任何方式使用文件,必须得打开文件,这样才能访问文件。
  • 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()将其转换为数值。

猜你喜欢

转载自blog.csdn.net/Sophia_11/article/details/84579757
今日推荐