• 第 10 章 文件和异常


    10.1 从文件中读取数据

    文本文件可存储的数据量多得难以置信:天气数据、交通数据、社会经济数据、文学作品等。每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用 程序来说尤其如此。例如,你可以编写一个这样的程序:读取一个文本文件的内容,重新设置这些数据的格式并将其写入文件,让浏览器能够显示这些内容。

    要使用文本文件中的信息,首先需要将信息读取到内存中。为此,你可以一次性读取文件的全部内容,也可以以每次一行的方式逐步读取

    10.1.1 读取整个文件

    pi_digits.txt

    3.1415926535

    8979323846

    2643383279

    file_read.py

    1 with open('pi_digits.txt') as file_object:
    2     contents=file_object.read()
    3     print(contents)
    4 
    5 
    6 3.1415926535
    7 
    8 8979323846
    9 2643383279

    在这个程序中,第1行代码做了大量的工作。我们先来看看函数open() 。要以任何方式使用文件——哪怕仅仅是打印其内容,都得先打开 文件,这样才能访问它。函数open() 接受一个参数:要打开的文件的名称。Python在当前执行的文件所在的目录中查找指定的文件。在这个示例中,当前运行的是file_reader.py,因此Python在file_reader.py所在的目录中 查找pi_digits.txt。函数open() 返回一个表示文件的对象。在这里,open('pi_digits.txt') 返回一个表示文件pi_digits.txt 的对象;Python将这个对象存储在我们将 在后面使用的变量中。 关键字with 在不再需要访问文件后将其关闭。在这个程序中,注意到我们调用了open() ,但没有调用close() ;你也可以调用open() 和close() 来打开和关闭文件,但 这样做时,如果程序存在bug,导致close() 语句未执行,文件将不会关闭。这看似微不足道,但未妥善地关闭文件可能会导致数据丢失或受损。如果在程序中过早地调 用close() ,你会发现需要使用文件时它已关闭 (无法访问),这会导致更多的错误。并非在任何情况下都能轻松确定关闭文件的恰当时机,但通过使用前面所示的结构,可 让Python去确定:你只管打开文件,并在需要时使用它,Python自会在合适的时候自动将其关闭。 有了表示pi_digits.txt的文件对象后,我们使用方法read() (前述程序的第2行)读取这个文件的全部内容,并将其作为一个长长的字符串存储在变量contents 中。这样,通过 打印contents 的值,就可将这个文本文件的全部内容显示出来:

    1 with open('pi_digits.txt') as file_object:
    2 contents = file_object.read()
    3 print(contents.rstrip())
    4 
    5 
    6 Python方法rstrip() 删除(剥除)字符串末尾的空白。

    10.1.2 文件路径

    当你将类似pi_digits.txt这样的简单文件名传递给函数open() 时,Python将在当前执行的文件(即.py程序文件)所在的目录中查找文件。 根据你组织文件的方式,有时可能要打开不在程序文件所属目录中的文件。例如,你可能将程序文件存储在了文件夹python_work中,而在文件夹python_work中,有一个名为 text_files的文件夹,用于存储程序文件操作的文本文件。虽然文件夹text_files包含在文件夹python_work中,但仅向open() 传递位于该文件夹中的文件的名称也不可行,因为Python 只在文件夹python_work中查找,而不会在其子文件夹text_files中查找。要让Python打开不与程序文件位于同一个目录中的文件,需要提供文件路径 ,它让Python到系统的特定位置 去查找。 由于文件夹text_files位于文件夹python_work中,因此可使用相对文件路 径来打开该文件夹中的文件。相对文件路径让Python到指定的位置去查找,而该位置是相对于当前运行的程 序所在目录的。在Windows系统中,在文件路径中使用反斜杠( )而不是斜杠(/ )

    with open('text_filesfilename.txt') as file_object:

    你还可以将文件在计算机中的准确位置告诉Python,这样就不用关心当前运行的程序存储在什么地方了。这称为绝对文件路径 。在相对路径行不通时,可使用绝对路径。例如, 如果text_files并不在文件夹python_work中,而在文件夹other_files中,则向open() 传递路径'text_files/ filename.txt' 行不通,因为Python只在文件夹python_work中查找 该位置。为明确地指出你希望Python到哪里去查找,你需要提供完整的路径。 绝对路径通常比相对路径更长,因此将其存储在一个变量中,再将该变量传递给open() 会有所帮助

    而在Windows系统中,

    file_path = 'C:Usersehmatthesother_files ext_filesfilename.txt' with open(file_path) as file_object:

    通过使用绝对路径,可读取系统任何地方的文件。就目前而言,最简单的做法是,要么将数据文件存储在程序文件所在的目录,要么将其存储在程序文件所在目录下的一个文件 夹(如text_files)中。

    10.1.3 逐行读取

    读取文件时,常常需要检查其中的每一行:你可能要在文件中查找特定的信息,或者要以某种方式修改文件中的文本

    要以每次一行的方式检查文件,可对文件对象使用for 循

    1 filename = 'pi_digits.txt' #1
    2  with open(filename) as file_object: #2
    3     for line in file_object:#3
    4     print(line)

     在1,我们将要读取的文件的名称存储在变量filename 中,这是使用文件时一种常见的做法。由于变量filename 表示的并非实际文件——它只是一个让Python知道到哪里 去查找文件的字符串,因此可轻松地将'pi_digits.txt' 替换为你要使用的另一个文件的名称。调用open() 后,将一个表示文件及其内容的对象存储到了变 量file_object 中(2)。这里也使用了关键字with ,让Python负责妥善地打开和关闭文件。为查看文件的内容,我们通过对文件对象执行循环来遍历文件中的每一行(3)。

    1 3.1415926535
    2 
    3 8979323846
    4 
    5 2643383279

     为何会出现这些空白行呢?因为在这个文件中,每行的末尾都有一个看不见的换行符,而print 语句也会加上一个换行符,因此每行末尾都有两个换行符:一个来自文件,另一 个来自print 语句。要消除这些多余的空白行,可在print 语句中使用rstrip()

    1 filename = 'pi_digits.txt'
    2 with open(filename) as file_object:
    3     for line in file_object:
    4         print(line.rstrip())
    5 
    6 
    7 3.1415926535
    8 8979323846
    9 2643383279

     10.1.4 创建一个包含文件各行内容的列表

  • 相关阅读:
    如何理解javaScript对象?
    web移动端开发技巧与注意事项汇总
    javaScript基础语法(上)
    css选择器的使用详解
    css属性兼容主流浏览器
    前端开发必备站点汇总
    Highchart基础教程-图表配置
    Highchart基础教程-图表的主要组成
    Highcharts入门小示例
    Highcharts配置
  • 原文地址:https://www.cnblogs.com/jdy113/p/8042460.html
Copyright © 2020-2023  润新知