青少年python系列目录_老程序员115的博客-优快云博客
在计算机信息时代,我们知道文本文件可存储的数据量多得难以置信,例如气象站的天气数据、交管部门的交通数据、金融商业街的社会经济数据、电子图书馆或博物馆的文学作品等等。每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用程序来说尤其如此。
例如,我们可以编写一个这样的程序:读取一个文本文件的内容,重新设置这些数据的格式并将其写入文件,让浏览器能够显示这些内容。要使用文本文件中的信息,首先需要将信息读取到内存中。为此,我们可以一次性读取文件的全部内容,也可以以每次一行的方式逐步读取。
在此次课程中,我们将学习如何处理文件,可以让程序能够快速地分析大量的数据。
1 全文读取文件
要读取文件数据,需要有一个包含几行数据信息的文本文件。下面首先来创建一个文件,它包含精确到小数点后30位的圆周率值,并且在小数点后每10位处都换行。
我们将文件的名称与格式保存为pi.txt,然后将该文件保存到与我们此时运行的Python文件的同一个目录中。
我们先来看看函数open()。要以任何方式使用文件——哪怕仅仅是打印其内容,都得先打开文件,这样才能访问它。
函数open()接受一个参数:要打开的文件的名称。Python在当前执行的文件所在的目录中查找指定的文件。
在这个示例中,当前运行的是全文读取文件.py,因此Python在全文读取文件.py所在的目录中查找pi.txt文件。函数open()返回一个表示文件的对象。这里,open('pi.txt')会返回一个表示文件pi.txt的对象。Python将这个对象存储在我们将在后面使用的变量中。
关键字with在不再需要访问文件后会将其关闭。在这个程序中,注意到我们调用了open(),但没有调用close()。当然,你也可以调用open()和close()来打开和关闭文件,但这样做时,如果程序存在bug,导致close()语句未执行,文件将不会关闭。这看似微不足道,但未妥善地关闭文件可能会导致数据丢失或受损。如果在程序中过早地调用close(),你会发现需要使用文件时它已关闭(无法访问),这可能会导致更多的错误。
并非在任何情况下都能轻松确定关闭文件的恰当时机,但通过使用前面所示的结构,可让Python去确定:你只管打开文件,并在需要时使用它,Python自会在合适的时候自动将其关闭。有了表示pi.txt的文件对象后,我们在程序的第三行使用read()函数方法读取这个文件的全部内容,并将读取到的信息作为一个长长的字符串存储在变量contents中。这样,通过打印contents的值,就可将这个文本文件的全部内容显示出来。
2 文件读取路径
当将类似pi.txt这样的简单文件名传递给函open()时,Python将在当前执行的文件(即.py程序文件)所在的目录中查找文件。但是有时可能要打开不在运行程序文件所属目录中的文件。例如,可能将程序文件存储在了计算机桌面的一个文件夹中,要让Python打开不与程序文件位于同一个目录中的文件,我们需要提供要打开的文件路径,它让Python到系统特定位置去查找。
1、相对路径文件查找
通常,程序运行文件是与数据文件分开存放的,假如我们在程序需运行文件目录下新建一个data文件夹,然后我们将pi.txt放入其中,这时我们该如何通过程序来访问打开pi.txt文件呢?我们先在.py文件目录下创建data文件夹,然后把pi.txt放入其中。
这行代码让Python在当前运行的.py程序文件目录下的data文件夹中,寻找.txt文件。请注意,在文件路径中使用反斜杠(\)而不是斜杠(/)。
相对路径查找操作执行的文件,其实就是相对于当前运行.py程序文件的磁盘路径位置。
2、绝对路径文件查找
我们还可以将文件在计算机中的准确位置告诉Python,这样就不用关心当前运行的.py程序文件存储在什么地方了。这称为绝对文件路径。在相对路径行不通时,可试着使用绝对路径。
运行程序后,我们看到此种方法,可以完成对绝对路径下的文件进行访问、操作,而且路径中也可以包含中文字符,要知道很多情况下是不支持使用中文地址的。
相对、绝对路径寻址的方式就像真实世界的地址,比如通过绝对路径寻址就像告诉系统:我是来自哪个省份、地级市、县(区)的一样,而相对路径寻址就像你已经有了地址作为参照,即以.py运行程序文件的地址作为参照地址,来告诉系统:我是同某某已知的.py运行程序文件是一个县的。
3 逐行读取文件
读取文件时,常常需要检查其中的每一行:你可能要在文件中查找特定的信息,或者要以某种方式来修改文件中的文本内容。
我们将要读取的文件的名称存储在变量file_path中,这是使用文件地址时一种常见的做法。由于变量file_path表示的并非实际文件,它只是一个让Python知道到哪里去查找文件的路径字符串,因此可轻松地将'pi.txt'替换为你要使用的另一个文件的名称。
调用open()后,将一个表示文件及其内容的对象存储到了变量file_object中。这里也使用了关键字with,让Python负责妥善地打开和关闭文件。为查看文件的内容,我们通过对文件对象执行for循环来查看文件中的每一行。
我们也可以对中文文本信息进行读取:
在进行中文文本信息读取的过程中,需要读取的目标文本文档的编码方式必须是UTF-8的格式,并在open()函数方法中指定编码方式encoding='utf8'。进行英文文本信息读取的过程中,需要读取的目标文本文档的编码方式必须是ANSI的格式,可不必指定编码方式。那什么是编码方式呢?下面我们来简单了解一下txt文本的四种编码方式:
ANSI:系统预设的标准文字储存格式。ANSI是American National Standards Institute的缩写。它成立于1918年,是一个自愿性的组织,拥有超过1300个会员,包括所有大型的电脑公司。ANSI专为电脑工业建立标准,它是世界上相当重要的标准。
Unicode:世界上所有主要指令文件的联集,包括商业和个人电脑所使用的公用字集。当采用Unicode格式储存文件时,可使用Unicode控制字符辅助说明语言的文字覆盖范围,如阿拉伯语、希伯来语。用户在记事本中输入含有Unicode字符的文字并储存文件时,系统会提示你必须选取“另存为”中的Unicode编码,这些字符才不会被遗失。部分Windows 2000字型无法显示所有的Unicode字符。如果发现文件中缺少了某些字符,只需将其变更为其它字型即可。
Unicode big endian:在Big-endian处理器(如苹果Macintosh电脑)上建立的Unicode文件中的文字位元组(存放单位)排列顺序,与在Intel处理器上建立的文件的文字位元组排列顺序相反。最重要的位元组拥有最低的地址,且会先储存文字中较大的一端。为使这类电脑的用户能够存取你的文件,可选择Unicode big-endian格式。
UTF-8:UTF意为通用字集转换格式(Universal Character Set Transformation Format),UTF-8是Unicode的8位元格式。如果使用只能在同类位元组内支持8个位元的重要资料一类的旧式传输媒体,可以选择UTF-8格式。
总结
1、全文读取文件
with open('pi.txt') as file_object:
contents = file_object.read()
print(contents)
2、文件读取路径
相对路径读取与绝对路径读取
3、逐行读取文件
file_path = 'C:\全文读取文件\data\pi.txt'
with open(file_path) as file_object:
for every_line in file_object:
print(every_line)