从文件中读取数据
# pi_digits.txt
3.1415926535
8979323846
2643383279
# file_reader.py
filename = 'pi_digits.txt'
with open(filename) as file_object:
# 读取整个文件
# contents = file_object.read()
# # rstrip()删除末尾的空行
# print(contents.rstrip())
# print('hello')
# 逐行读取
# for line in file_object:
# print(line.rstrip())
# 将文件各行存储在一个列表中
lines = file_object.readlines()
for line in lines:
print(line.rstrip())
# pi_string.py
filename = 'pi_digits.txt'
with open(filename) as file_object:
lines = file_object.readlines()
# 使用文件的内容
pi_string = ''
for line in lines:
pi_string += line.strip()
print(pi_string)
print(len(pi_string))
- 关于filename,是以当前工作目录为基点的文件路径,可以使用相对/绝对路径。在Windows系统中,在文件路径中应该使用反斜杠(),在Linux系统使用斜杆(/)
- 关键字with,会在不需要访问文件后自动将其关闭。
- read()到达文件末尾时会返回一个空字符串,要删除末尾的空行,可以在print语句中使用rstrip()
- 对于行16,逐行读取,可以使用行17-18的方式
- 将文件内容各行存储在一个列表中,方便在with块之外使用,详细见行20-23
- 使用文件的内容,行34,strip()可以将字符串里的空格也去掉
写入文件
# write_message.py
filename = "text_files/programming.txt"
with open(filename,'w') as file_object:
file_object.write("I love programming.\n")
file_object.write("I love creating new things.")
- 调用open( )时提供了两个实参,第一个是要打开的文件名称。第二个实参是确定读写模式。可以指定读取模式(‘r’)、写入模式(‘w’)、附加模式(‘a’)或让你能够读取和写入文件的模式(‘r+’)。默认为读取模式。
- 写入多行需要在write( )语句中包含换行符。
- 以附加模式打开文件时,Python不会在返回文件对象前清空文件。
异常
try:
print(5 / 0)
except ZeroDivisionError:
print("You can't divide by zero!")
else:
print("可以正常运行")
最基本的结构是try-except代码块,如果try出错,便执行except,否则跳过。
在此基础上,还可以包含一个else代码块,依赖于try代码块成功执行的代码都应放到else代码块中。
存储数据
模块json能将简单的Python数据结构转存到文件中,并在程序再次运行时加载该文件中的数据。
# number_write.py
import json
numbers = [2, 3, 5, 7, 11, 13]
filename = 'name.json'
with open(filename, 'w') as f_obj:
json.dump(numbers, f_obj)
# number_read.py
import json
filename = 'name.json'
with open(filename) as f_obj:
numbers = json.load( f_obj)
print(numbers)
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 + "!")
上面例子实现了保存和读取用户生成的数据。