《Python编程从入门到实践》10

10.1 从文件中读取数据

10.1.1 读取整个文件

with open('文件名') as 变量1:
	变量2 = 变量1.read()
	print(变量2)
注:方法strip删除字符串前后的空格,lstrip删除字符串之前的空格,rstrip删除字符串之后的空格

10.1.2 文件路径

Windows系统有时能够正确地解读文件路径中的斜杠(/)。
如果未成功解读,将斜杠(/)换位反斜杠(\)即可。
另外,由于反斜杠在Python中被视为转义标记,为在Windows中确保万无一失,
应以原始字符串的方式指定路径,在开头的单引号前加上r。

10.1.3 逐行读取

变量1 = '文件路径'

with open(变量1)as 变量2for line in 变量2print(line.rstrip)

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

变量1 = '文件路径'

with open(变量1)as 变量2:
	变量3 = 变量2.read.lines()

for line in 变量3:
	print(line.rstrip())
方法readlines()从文件中读取每一行,并将其存储在一个列表中。

10.1.5 使用文件中的内容

读取文件中的信息之后,对信息进行循环遍历、运算等操作。
注意:读取文本文件时,Python将其中的所有文本都解读为字符串。
如果你读取的是数字,并要将其作为数值使用,就必须使用函数int()将其转换为整数,
或使用函数float()将其转换为浮点数。

10.1.6 包含一百万位的大型文件

在输出这类文件中的内容时,一般只需要前几十位数据,u送一我们要用到切片
print(f"{变量[:60]}...")

10.2 写入文件

10.2.1 写入空文件

filename = 'text_files/programming.txt'

with open(filename, 'a') as file_object:
    file_object.write(" I Love You")
open()函数有两个实参:一个时要打开的文件的名称,另一个是告诉Python以什么形式打开文件
'w'、'r'、'a':写入模式、读取模式、附加模式
如果忽略了模式实参,Python将以默认的只读模式打开文件
如果你要写入的文件不存在,函数open()将自动创建它。
以写入模式('w')打开已存在文件,将在返回文件对象前清空该文件
注:Python只能将字符串写入文本文件。要将数值数据存储到文本文件中,必须先使用函数str()将其转换
为字符串格式

10.2.2 写入多行

函数write()不会在你写入的文本末尾添加换行符

10.2.3 附加到文件

文件原来的内容还在,它们后面是我们刚添加的内容

10.3 异常

10.3.1 处理ZeroDivisionError异常

运行下列代码会报错,程序停止运行

print(5/0)

Traceback (most recent call last):
  File "test.py", line 1, in <module>
    print(5/0)
ZeroDivisionError: division by zero

10.3.2 使用try-except代码块

try:
	print(5/0)
except ZeroDivisionError:
	print("You can't divide by zero!")

10.3.3 使用异常避免崩溃

10.3.4 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: ")
	if second_number == 'q':
		break
	try:
		answer = int(first_number) / int(second_number)
	except ZeroDivisionError:
		print("You can't divide by 0!")
	except ValueError:
		print("Please enter number!")
	else:
		print(answer)
Python尝试执行try代码块中的代码;
只有可能引发异常的代码才需要放在try语句中。
有时候,有一些仅在try代码块成功执行时才需要运行的代码;这些代码应放在else代码块中。
excpet代码块告诉苦python,如果它尝试运行try代码块中的代码时引发了指定的异常,该怎么办。

10.3.5 分析文本

方法split():根据一个字符串创建一个单词列表。
以空格为分隔符将字符串分拆成多个部分,并将这些部分都存储到一个列表中。

10.3.3 使用多个文件 + 失败时一声不吭

def count_words(filename):
    """Count the approximate number of words in a file."""
    try:
        with open(filename, encoding='utf-8') as f:
            contents = f.read()
    except FileNotFoundError:
        pass
    else:
        words = contents.split()
        num_words = len(words)
        print(f"The file {filename} has about {num_words} words.")

filenames = ['alice.txt', 'siddhartha.txt', 'moby_dick.txt', 'little_women.txt']
for filename in filenames:
    count_words(filename)

pass语句:执行pass语句,python不会做任何操作,程序继续运行。用户看不到不需要了解的错误。

10.4 存储数据

JSON格式最初是为JavaScript开发的,但随后成了一种常见的格式,被包括python在内的众多语言采用。

10.4.1 使用json.dump()和json.load()

json.dump()接受两个实参:要存储的数据以及可用于存储数据的文件对象
import json
numbers = [2, 3, 5, 7, 11, 13]
filename = 'numbers.json'
with open(filename, 'w') as f:
    json.dump(numbers, f)
json.load()接受一个实参:被读取的文件名
import json
filename = 'numbers.json'
with open(filename) as f:
	numbers = json.load(f)
print(numbers)

10.4.2 保存和读取用户生成的数据

10.4.3 重构

重构:将代码划分为一系列完成具体工作的函数。
重构让代码更清晰、更易于理解、更容易拓展。
import json

def get_stored_username():
	"""如果获取了用户名,就获取它"""
	filename = 'username.json'
	try:
		with open(filename) as f:
			username = json.load(f)
	except FileNotFoundError:  # 对异常的处理
		return None
	else:
		return username

def get_new_username():
	username = input("What is your name?")
	filename = 'username.json'
	with open(filename, 'w') as g:
		json.dump(username, g)
	return username

def greet_user():
	"""问候用户并指出其姓名"""
	username = get_stored_username()
	if username:
		print(f"Welcome back, {username}!")
	else:
		username = get_new_username()
		print(f"We'll remember you when you come back {username}!")

greet_user()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值