《Python编程:从入门到实践》知识点 第10章 文件和异常

《Python编程:从入门到实践》知识点 第2-4章

《Python编程:从入门到实践》知识点 第5-7章

《Python编程:从入门到实践》知识点 第8章 函数

《Python编程:从入门到实践》知识点 第9章 类

从文件中读取数据

  • 函数 open() 接受一个参数:要打开的文件的名称。Python在当前执行的文件所在的目录中查找指定的文件
  • 如果是跟py文件同一目录下的文件夹里的文件,可以用text_files\ filename .txt;如果不在同一目录下,用绝对路径
  • 关键字 with 在不再需要访问文件后将其自动关闭
  • read()到达文件末尾时返回一个空字符串,而将这个空字符串显示出来时就是一个空行。要删除多出来的空行,可在print语句中使用rstrip()
  • 逐行读取的时候,每行的末尾都有一个看不见的换行符,使用 rstrip() 消除这些多余的空白行
  • 使用关键字with时,open()返回的文件对象只在with代码块内可用
#pi_digits.txt
3.1415926535
  8979323846
  2643383279

with open('E:\project\example\chapter_10\pi_digits.txt') as file_object:
    contents = file_object.read()
    print(contents.rstrip())

filename = 'E:\project\example\chapter_10\pi_digits.txt'
with open(filename) as file_object:
    #逐行读取
    for line in file_object:
        print(line.rstrip())

写入文件

  • open() 需要两个实参,第一个实参是要打开的文件的名称; 第二个实参有几种模式,可指定读取模式r写入模式w附加模式a或让你能够读取和写入文件的模式r+默认只读模式打开文件
  • 如果你要写入的文件不存在,函数open()将自动创建
  • w模式打开文件,如果指定的文件已经存在,Python将在返回文件对象前清空该文件
  • 附加模式打开文件,不覆盖原有的内容
  • 要让每个字符串都单独占一行,需要在 write() 语句中包含换行符
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 browser.\n")

异常

  • try-except-else代码块的工作原理大致如下:Python尝试执行try代码块中的代码;只有可能引发异常的代码才需要放在try语句中。有时候,有一些仅在try代码块成功执行时才需要运行的代码;这些代码应放在else代码块中。except代码块告诉Python,如果它尝试运行try代码块中的代码时引发了指定的异常,该怎么办
  • 通过预测可能发生错误的代码,可编写健壮的程序,它们即便面临无效数据或缺少资源,也能继续运行,从而能够抵御无意的用户错误和恶意的攻击
  • pass语句,可在代码块中使用它来让Python什么都不要做
  • 只要程序依赖于外部因素,如用户输入、存在指定的文件、有网络链接,就有可能出现异常
def count_words(filename):
    """Count the approximate number of words in a file."""
    try:
        with open(filename, encoding='utf-8') as f_obj:
            contents = f_obj.read() 
    except FileNotFoundError:
        pass
    else:
        # Count approximate number of words in the file.
        words = contents.split()
        num_words = len(words)
        print("The file " + filename + " has about " + str(num_words) + " words.")

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

存储数据

  • 模块json让你能够将简单的Python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据,还可以使用json在Python程序之间分享数据
  • json.dump() 来存储,用 json.load() 来获取
  • 使用文件扩展名.json来指出文件存储的数据为JSON格式
  • 重构是将代码划分为一系列完成具体工作的函数
import json

def get_stored_username():
    """Get stored username if available."""
    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 for a new 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 the user by name."""
    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()

《Python编程:从入门到实践》知识点 第11章 测试代码

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值