建一个信息网站多少钱,海城整站优化,具有价值的网站建设,网站管理功能图文章目录 一. 从文件中读取数据1. 读取整个文件2. 文件路径3. 逐行读取4. 创建一个包含文件各行内容的列表 二. 写入文件1. 写入空文件2. 写入多行3. 附加到文件 三. 异常1. 处理ZeroDivisionError异常2. 使用try-except代码块3. try-except-else ing4. 处理FileNotFoundError异… 文章目录 一. 从文件中读取数据1. 读取整个文件2. 文件路径3. 逐行读取4. 创建一个包含文件各行内容的列表 二. 写入文件1. 写入空文件2. 写入多行3. 附加到文件 三. 异常1. 处理ZeroDivisionError异常2. 使用try-except代码块3. try-except-else ing4. 处理FileNotFoundError异常5. 分析文本6. 使用多个文件7. 静默失败 四. 存储数据1. 使用json.dump()和json.load()2. 保存和读取用户生成的数据 本文将学到 如何使用文件如何一次性读取整个文件以及如何以每次一行的方式读取文件的内容如何写入文件以及如何将文本附加到文件末尾什么是异常以及如何处理程序可能引发的异常如何存储Python数据结构以保存用户提供的信息避免用户每次运行程序时都需要重新提供。 一. 从文件中读取数据
可以编写一个这样的程序读取一个文本文件的内容重新设置这些数据的格式并将其写入文件让浏览器能够显示这些内容。
要使用文本文件中的信息首先需要将信息读取到内存中。为此你可以一次性读取文件的全部内容也可以以每次一行的方式逐步读取。
1. 读取整个文件
样例文件
3.141592653589793238462643383279下面的程序打开并读取这个文件再将其内容显示到屏幕上
file_reader.py
if __name__ __main__:with open(pi_digits.txt) as file_object:contents file_object.read()print(contents)a. 接收文件参数 函数open()接受一个参数要打开的文件的名称。 Python在当前执行的文件所在的目录中查找指定的文件。在本例中当前运行的是file_reader.py因此Python在file_reader.py所在的目录中查找pi_digits.txt。 b. 创建文件实例 with open(pi_digits.txt) as file_object 返回一个表示文件pi_digits.txt的对象并将该对象赋给file_object。关键字with在不再需要访问文件后将其关闭。
c. 打开和关闭文件 关键字with在时不再需要访问文件后将其关闭。
在这个程序中注意到我们调用了open()但没有调用close()。也可以调用open()和close()来打开和关闭文件但这样做时如果程序存在bug导致方法close()未执行文件将不会关闭。
通过使用前面所示的结构可让Python去确定你只管打开文件并在需要时使用它Python自会在合适的时候自动将其关闭。 类似java 7中的自动关闭流 d. 读取文件 使用方法read()读取这个文件的全部内容并将其作为一个长长的字符串赋给变量contents。这样通过打印contents的值就可将这个文本文件的全部内容显示出来
3.141592653589793238462643383279e. 处理空行 相比于原始文件该输出唯一不同的地方是末尾多了一个空行。为何会多出这个空行呢因为read()到达文件末尾时返回一个空字符串而将这个空字符串显示出来时就是一个空行。要删除多出来的空行可在函数调用print()中使用rstrip()
with open(pi_digits.txt) as file_object:contents file_object.read()print(contents.rstrip())2. 文件路径
相对路径 例如你可能将程序文件存储在了文件夹python_work中而该文件夹中有一个名为text_files的文件夹用于存储程序文件操作的文本文件。
可以使用相对文件路径来打开其中的文件该位置是相对于当前运行的程序所在目录的。
with open(text_files/filename.txt) as file_object:绝对文件路径 将文件在计算机中的准确位置告诉Python这样就不用关心当前运行的程序存储在什么地方了。这称为绝对文件路径。
file_path /home/ehmatthes/other_files/text_files/_filename_.txt
with open(file_path) as file_object:3. 逐行读取
要以每次一行的方式检查文件可对文件对象使用for循环
if __name__ __main__:with open(pi_digits.txt) as file_object:for line in file_object:print(line.strip())因为在这个文件中每行的末尾都有一个看不见的换行符而函数调用print()也会加上一个换行符因此每行末尾都有两个换行符一个来自文件另一个来自函数调用print()。所以在函数调用print()中使用rstrip()。 4. 创建一个包含文件各行内容的列表
将文件各行缓存到列表中等到需要时再使用。
示例 在with代码块中将文件pi_digits.txt的各行存储在一个列表中再在with代码块外打印 with open(pi_digits.txt) as file_object:lines file_object.readlines()for line in lines:print(line.rstrip())二. 写入文件
1. 写入空文件 with open(pi_digits.txt,w) as file_object:file_object.write(I love python)实参一也是要打开的文件的名称。实参二‘w’告诉Python要以写入模式打开这个文件。 – 打开文件时可指定读取模式‘r’、写入模式‘w’、附加模式‘a’或读写模式‘r’。如果省略了模式实参Python将以默认的只读模式打开文件。 – 如果要写入的文件不存在函数open()将自动创建它。然而以写入模式‘w’打开文件时千万要小心因为如果指定的文件已经存在Python将在返回文件对象前清空该文件的内容。 注意 Python只能将字符串写入文本文件。要将数值数据存储到文本文件中必须先使用函数str()将其转换为字符串格式。
2. 写入多行
函数write()不会在写入的文本末尾添加换行符因此如果写入多行时没有指定换行符文件看起来可能不是你希望的那样 with open(programming.txt, w) as file_object:file_object.write(I love programming.\n)file_object.write(I love creating new games.\n)要让每个字符串都单独占一行需要在方法调用write()中包含换行符。 3. 附加到文件
如果要给文件添加内容而不是覆盖原有的内容可以以附加模式打开文件。 with open(filename, a) as file_object:file_object.write(I also love finding meaning in large datasets.\n)file_object.write(I love creating apps that can run in a browser.\n)三. 异常
每当发生让Python不知所措的错误时它都会创建一个异常对象。如果你编写了处理该异常的代码程序将继续运行如果未对异常进行处理程序将停止并显示traceback其中包含有关异常的报告。
1. 处理ZeroDivisionError异常
print(5/0)# Traceback (most recent call last):# File division_calculator.py, line 1, in module# print(5/0)# ZeroDivisionError: division by zero在上述traceback中ZeroDivisionError是个异常对象。Python无法按你的要求做时就会创建这种对象。在这种情况下Python将停止运行程序并指出引发了哪种异常。 2. 使用try-except代码块
if __name__ __main__:try:print(5 / 0)except ZeroDivisionError:print(You cant divide by zero!)在本例中try代码块中的代码引发了ZeroDivisionError异常因此Python查找指出了该怎么办的except代码块并运行其中的代码。 3. try-except-else ing
通过将可能引发错误的代码放在try-except代码块中可提高程序抵御错误的能力。依赖try代码块成功执行的代码都应放到else代码块中
if __name__ __main__:while True:if second_number q:breaktry:answer int(first_name)/int(second_number)except ZeroDivisionError:print(You cant divide by zero!)else:print(answer)try-except-else代码块的工作原理大致如下。Python尝试执行try代码块中的代码只有可能引发异常的代码才需要放在try语句中。有时候有一些仅在try代码块成功执行时才需要运行的代码这些代码应放在else代码块中。 但是我直接将print(answer)放到answer下面一行不行吗测试可信。 4. 处理FileNotFoundError异常
filename alice.txttry:with open(filename, encodingutf-8) as f:contents f.read()
except FileNotFoundError:print(fSorry, the file {filename} does not exist.)5. 分析文本
if __name__ __main__:filename alice1.txttry:with open(filename, encodingutf-8) as f:contents f.read()except FileNotFoundError:print(fSorry, the file {filename} does not exist.)else:# 计算该文件大致包含多少个单词。words contents.split()num_words len(words)print(fThe file {filename} has about {num_words} words.)6. 使用多个文件
def count_words(filename):--snip--filenames [alice.txt, siddhartha.txt, moby_dick.txt, little_women.txt]
for filename in filenames:count_words(filename)7. 静默失败
有时候你希望程序在发生异常时保持静默就像什么都没有发生一样继续运行。 def count_words(filename):计算一个文件大致包含多少个单词。try:--snip--except FileNotFoundError:
❶ passelse:--snip--filenames [alice.txt, siddhartha.txt, moby_dick.txt, little_women.txt]for filename in filenames:count_words(filename)现在出现FileNotFoundError异常时将执行except代码块中的代码但什么都不会发生。这种错误发生时不会出现traceback也没有任何输出。用户将看到存在的每个文件包含多少个单词但没有任何迹象表明有一个文件未找到。 四. 存储数据
模块json让你能够将简单的Python数据结构转储到文件中并在程序再次运行时加载该文件中的数据
1. 使用json.dump()和json.load()
第一个程序将使用json.dump()来存储这组数而第二个程序将使用json.load()。
if __name__ __main__:# 写入文件numbers [2, 3, 5, 7, 11, 13]filename numbers.jsonwith open(filename, w) as f:json.dump(numbers, f)# 读文件with open(filename) as f:numbers_read json.load(f)print(numbers_read) 2. 保存和读取用户生成的数据
import jsonif __name__ __main__:# 如果以前存储了用户名就加载它。# 否则提示用户输入用户名并存储它。filename username.jsontry:with open(filename) as f:username json.load(f)except FileNotFoundError:username input(What is your name? )with open(filename, w) as f:json.dump(username, f)print(fWell remember you when you come back, {username}!)else:print(fWelcome back, {username}!)参考《Python编程从入门到实践第二版》