读取整个文件:
with open('pi_digits.txt') as file_object:
contents = file_object.read()
print(contents)
⚠️:
- open() 对文件进行任何操作都需要打开文件才能访问,open()接受的参数是‘需要打开文件的名称’。Python在file_reader.py的目录中查找需要打开的’pi_digits.txt’。函数open()返回一个表示文件的对象,python将这个对象储存在后续需要使用的变量中。
with
在不再需要访问文件后将其关闭。open()和close()的组合也是可行的,但不好(时机不好把握)。而通过with,可以利用python来确定,只管打开并在需要的时候使用该文件,在合适(不再需要该文件的时候)会将其自动关闭。- 方法read()可以读取该文件的所有内容,并作文字符串储存在所需的变量中。
>3.1414926535
8979323846
2643383279
注意到这里有一个空行,是因为read()到达文件末尾时返回一个空字符串,而将这个空字符串显示出来就是一个空行,要删除这个空行的话可以在print语句中使用rstrip():。
with open('pi_digits.txt') as file_object:
contents = file_object.read()
print(contents.rstrip())
>3.1414926535
8979323846
2643383279
文件路径
当所需要进行操作的文件不在当前文件夹中时,
需要提供文件路径到特定的位置进行查找。
相对路径指对于文件夹中的文件,省略前面部分,只用指明其在文件夹中的位置。
绝对路径则是指整个系统中的路径。
逐行读取
file_name = 'pi_digits.txt'
with open(filename) as file_object:
for line in file_object:
print(line)
利用每次一行的方式检查文件,可以对文件对象使用for循环。
>
3.1415925
2839182
323123123
434123124124124124124
该文件中,每行的末尾都有一个看不见的换行符,print语句也会加上一个换行符。每行末尾都有两个换行符,一个来自文件一个来自print语句。
或者可以使用file_object_readlines()
从文件读取每一行并且存储在一个列表中。使用文件中内容的时候也可以用该函数把内容作为列表存储
写入空文件
file_name = 'programming.txt'
with open(file_name, 'w') as file_project:
file_object.write("i love u")
⚠️:
1open()中的第一个参数为打开文件名,第二个实参’w’
读取模式'r'——默认
写入模式‘w’——无换行符需手动添加,若指定文件不存在会创建,若存在则会在返回对象文件前清空该文件
附加模式'a'——写入的每行都在文件末尾,原内容依然存在
异常
try-except
try:
print(5/0)#reason
except ZeroDivisionError:#error type
print("you can't divide by zero !")
如果try中的代码块运行导致了错误,python将会查找这样的“指定错误与引发错误相同”的except代码块并运行其中的代码。
try-except-else
print("Give me two numbers, and I'll divide them.")
print("Enter 'q' to quit. ")
while True:
first_number = input("NnFirst number: ")
if first_number == 'q':
break
second_number = input("Second number: ")
try:
answer = int(first_number) / int(second_number)
except ZeroDivisionError:
print("you can not do that")
else:
print(answer)
在try代码块成功执行时才需要运行的代码应该放在else代码块中。不需要报告错误的时候只需要在except中➕pass
即可。
存储数据
json模块介绍
介绍:很多程序都要求用户输入某种信息,并且把用户提供的信息储存在数据结构中,用户关闭程序时几乎总是要保存所提供的信息,利用模块json就可以来存储数据。
功能:json可以把简单的python数据结构转储到文件中,并在该程序再次运行时加载该文件中的数据,也可用于分析数据。
函数:json.dump()
:用于储存这组数字,接受两个实参,1是要存储的数据以及可用于储存数据的文件对象。
import json
numbers = [2, 3, 5, 7, 11, 13]
file_name = 'numbers.json'
with open(file_name, 'w') as f_obj:
json.dump(numbers, f_obj)
储存的格式为.json
代码范例:
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 a user's name has been stashed, then get it"""
file_name = 'username.json'
try:
with open(file_name) as f_obj:
username = json.load(f_obj)
except FileNotFoundError:
return None
else:
return username
def get_new_username():
"""remind users to input their names"""
username = input("what is your name ?")
file_name = 'username.json'
with open(file_name, 'w') as f_obj:
json.dump(username, f_obj)
return username
def greet_users():
"""greet users and point out their names"""
username = get_stored_username()
if username:
print("welcome back, " + username + "!")
else:
username = get_new_username()
print("we'll remember you when you come back next time, " + username + "!")
greet_users()