文件和异常

读取整个文件:

with open('pi_digits.txt') as file_object:
    contents = file_object.read()
    print(contents)

⚠️:

  1. open() 对文件进行任何操作都需要打开文件才能访问,open()接受的参数是‘需要打开文件的名称’。Python在file_reader.py的目录中查找需要打开的’pi_digits.txt’。函数open()返回一个表示文件的对象,python将这个对象储存在后续需要使用的变量中。
  2. with在不再需要访问文件后将其关闭。open()和close()的组合也是可行的,但不好(时机不好把握)。而通过with,可以利用python来确定,只管打开并在需要的时候使用该文件,在合适(不再需要该文件的时候)会将其自动关闭。
  3. 方法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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值