Python基础:文件和异常

写入文件

要将文本写入文件,你在调用open()时需要提供两个实参:

第一个实参是文件的名称,可以是相对路径(Python基于当前执行的.py文件所在的目录),也可以是绝对路径(不用多说),在Linux或OS X中,文件路径类似于这样'text_files/filename.txt';在Windows系统中,使用反斜杠而不是斜杠'text_files\filename.txt',由于反斜杠在Python中被视为转义标记,为在Windows中确保万无一失,应以原始字符串的方式制定路径,即在开头的单引号前加上r。

第二个实参‘w’告诉Python,我们要以写入模式打开这个文件。打开文件时,可指定读取模式('r')、写入模式('w')、附加模式('a')或让你能够读取和写入文件的模式('r+')。如果你省略了模式实参,Python默认只读模式打开文件。

关键字with在不需访问文件后将其关闭,open()返回的文件对象只在with代码块内可用。这里只调用了open(),但没有调用close();你也可以调用open()和close()来打开和关闭文件。

Python只能将字符串写入文本文件。要将数值数据存储到文本文件中,必须先使用str()函数将其转换为字符串格式。

filename = 'programming.txt'

with open(filename, 'w') as file_object:
	file_object.write("I love programming.\n")
	file_object.write("I love creating new games.\n")

如果你想要给文件添加内容,而不是复制原有的内容,可以附加模式打开文件。如果指定的文件不存在,Python将为你创建一个空文件。

filename = 'programming.txt'


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 broswer.\n")

从文件中读取数据

使用read()方法读取文件的全部内容。readline()或readlines()方法进行更细致的处理。

filename = 'programming.txt'

def print_file_contents1():
	''' using read()'''
	with open(filename) as file_object:
		contents = file_object.read()
		print(contents.rstrip())

def print_file_contents2():
	''' using for'''
	with open(filename) as file_object:
		for line in file_object:
			print(line.rstrip())

def print_file_contents3():
	''' using readlines()'''
	with open(filename) as file_object:
		lines = file_object.readlines()
		for line in lines:
			print(line.rstrip())
		
print_file_contents1()	
print_file_contents2()	
print_file_contents3()	

异常

Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。异常是使用try-except代码块或try-except-else代码块处理的。依赖于try代码块成功执行的代码都应放到else代码块中。

通过预测可能发生错误的代码,可编写健壮的程序,它们即使面临无效数据或缺少资源,也能继续运行,从而能够抵御无意的用户错误和恶意的攻击。

print("Give me two numbers, and I'll divide them.")
print("Enter 'q' to quit.")

while True:
	first_number = input("\nFirst Number:")
	if first_number == 'q':
		break
	second_number = input("Second Number:")
	try:
		answer = int(first_number) / int(second_number)
	except ZeroDivisionError:
		print("You can't divide by 0!")
	else:
		print(answer)		
有时候你希望程序在发生异常时一声不吭,就像什么都没有发生一样继续运行。Python中有一个 pass语句,可在except代码块明确的告诉Python什么都不要做。

存储数据

一种简单的方式是使用模块json来存储数据。JSON(JavaScript Object Notation)格式最初是为JavaScript开发的,但随后成了一种常见格式,被包括Python在内的众多语言采用。

函数json.dump()接受两个实参:要存储的数据以及可用于存储数据的文件对象。

函数json.load()加载存储在文件对象中的信息,并返回它。

import json

filename = 'username.json'
try:
	with open(filename) as f_obj:
		username = json.load(f_obj)
except FileNotFoundError:
	username = input("What is your name?")
	with open(filename, 'w') as f_obj:
		json.dump(username, f_obj)
		print("We'll remember you when you come back," + username 
		+ '!')
else:
	print("Welcome back, " + username + "!")		
			


你经常会遇到这样的情况:代码能够正确的运行,但可做进一步的改进——将代码划分为一系列完成具体工作的函数。这样的过程被成为重构。重构让代码更清晰、更易于理解、更容易扩展。

import json

def get_stored_username():
	'''if stored username, return it'''
	filename = 'username.json'
	try:
		with open(filename) as f_obj:
			username = json.load(f_obj)
	except FileNotFoundError:
		return None
	else:
		return username		
		
def get_new_username():
	'''prompt imput username'''
	username = input("What is your name?")
	filename = 'username.json'
	with open(filename, 'w') as f_obj:
		json.dump(username,f_obj)
	return username
	
def greet_user():
	'''greet user, print username	'''
	username = get_stored_username()
	if username:
		print("Welcome back, " + username + "!")
	else:
		username = get_new_username()
		print("We'll remember you when you come back, " + username 
			+ '!')

greet_user()			

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值