文件和异常

文件:让程序能够处理大量数据
异常:Python创建的特殊对象,用于管理程序运行中的错误
模块json:保存用户数据,以免在程序停止运行后丢失

1. 从文件中读取数据

读取一个文件的内容,从新设置这些数据的格式,并将其写入文件,让浏览器能够显示这些内容
读取文件时,可以一次性读取所有内人,也可以逐步读取

1.1 读取整个文件

在桌面创建一个111.txt的文本文件
关键词with在不需要访问文件时将其关闭
open函数打开111.txt文本,此时需要一个变量接收
os包:专门负责路径相关操作

如果文件在Python运行目录中可以免去指定路径

# 导入os包
import os
# 显示当前工作路径
os.getcwd()
# 设置新的工作路径
os.chdir('C:\\Users\\Administrator\\Desktop')
# open函数打开111.txt文本,并将其保存到a变量中
with open('111.txt') as a:
    # 使用read()方法读取文件全部内容,并将其作为一个字符串保持到contents变量中
    内容 = a.read()
    print(内容) # 【显示所有内容】

要以任何方式使用文件,都得先打开文件,这样才能访问它
函数open()接收一个参数:要打开文件的名称(Python在当前执行的文件所在目录中查找指定文件,并返回一个表示文本的对象)
另外也可以调用close()关闭文件,但是如果程序存在bug,导致文件不能正常关闭,可能导致数据丢失
使用whit关键字,只管打开文件,并在需要时使用它,让Python去确定在合适的时候自动将其关闭

会看到输出的结果最末尾有一个空行,这是因为read()到达文件末尾时返回一个空字符串
使用rstrip()方法,剔除字符串末尾空白

with open('111.txt') as a:
    内容 = a.read()
    print(内容.rstrip())

1.2 文件路径

当要打开的文件不在当前程序所在目录下时,就需要提供文件路径
相对文件路径:文件与程序公用一个上级文件夹

with open("上级文件名\pi_digits.txt") as file_object:

绝对文件路径:将文件在计算机的精确位置给程序,因文件路径较长,需要一个变量来储存

a = 'E:\\TDRDIS Book\\编程\\python基础入门\\111.txt'
with open(a) as b:
    内容 = b.read()
    print(内容)

Windows在Python的\也表示转义标记,为在Windows下万无一失,可在原始字符串的方式指定路径,即开通的引号前加上r

1.3 逐行读取

for循环遍历每行,用于查找特定信息,或者修改文本

filename = 'C:\\Users\\Administrator\\Desktop\\111.txt'
with open(filename) as a:
    for line in a:
        print(line.rstrip())

1.4 文件各行存储到列表

文件在with代码块内存在到一个列表中,便于在with代码块外使用
方法readlines()从文件中逐行读取每一行,并存储到列表中

filename = 'C:\\Users\\Administrator\\Desktop\\111.txt'
with open(filename) as a:
    lines = a.readlines()

# 遍历列表
for line in lines:
    print(line.rstrip()) # 【每一列是一个列表的元素】

查看列表字符串长度

for line in lines:
    # 打印每行长度
    print(len(line)) # 【显示列表每个元素的长度】
    # 去除空格的每行长度
    print(len(line.strip()))

查看列表总字符串长度

# 创建一个变量,用于接收列表中所有元素的汇总
a = ''
for line in lines:
    a += line.strip()
print(len(a))

Python将所有文本都解读为字符串,如果读取的数字,用函数int()将其转为整数,用函数float()将其转为浮点数

1.5 大型文件

如果文件包含很多位数,如π

filename = 'C:\\Users\\Administrator\\Desktop\\111.txt'
# 打开文件
with open(filename) as a:
    # 将文件存储在列表中
    lines = a.readlines()

a = ''
for line in lines:
    a += line.strip()

# 打印前10位
print(a[:10]) # 3.14159265

1.6 在列表中查看特定内容

filename = 'C:\\Users\\Administrator\\Desktop\\111.txt'
with open(filename) as a:
    lines = a.readlines()

a = ''
for line in lines:
    a += line.strip()

# 提示用户输入特定内容
输入内容 = input('请输入目标内容: ')

# 检查内容是否在列表中
if 输入内容 in a:
    print('目标在列表中')
else:
    print('目标不在列表中')

2. 写入文件

将数据写入到文件中

2.1 写入空文件

open()提供2个实参,第一个是要打开的文件,第二个是以什么模式打开文件
读取模式r、写入模式w、附加模式a、读取和写入模式r+

如果省略模式实参,Python默认打开只读模式

filename = 'C:\\Users\\Administrator\\Desktop\\1111.txt'
# 以写入模式打开文本
with open(filename, 'w') as a:
    # 写入字符串
    a.write('新年快乐') # 【在桌面生成1111.txt文档,内容是‘新年快乐’】

写入模式w,如果没有这个文件,函数open()将自动创建这个文本,如果已存在,Python将在返回文件对象当前文件,即原内容被当前写入内容覆盖
使用方法write()将字符串写入文件
Python只能读字符串,如果要写入数据值,必须先使用函数str()将其转为字符串

多行编辑:使用换行符\n换行

filename = 'C:\\Users\\Administrator\\Desktop\\1111.txt'

with open(filename, 'w') as a:
    a.write('新年快乐\n')
    a.write('恭喜发财\n')

2.2 附加到文件

给文件添加内容,而不覆盖原有的内容,可用添加模式a打开文件
在原有的基础上添加内容

filename = 'C:\\Users\\Administrator\\Desktop\\1111.txt'

# 以附加模式打开文件
with open(filename, 'a') as a:
    a.write('红包拿来\n')
    a.write('拿去不谢\n')

3. 异常

Python使用异常这一特殊对象来管理程序执行期间发生的错误

当Python不知所措的时候,会建立一个异常对象

编写了处理异常的代码,程序将继续运行;未对异常进行处理,程序将停止,并显示traceback
异常用try-except代码处理,其让Python执行指定代码,同时告诉Python发生异常该则么办

即使出现异常,程序也将继续运行:显示编写的友好的错误信息,而不是令人困惑的traceback\

3.1 ZeroDivisionError异常

异常 1.png

在运行结果中,指出的错误ZeroDivisionError是一个异常对象

使用try-except代码块

try:
    print(5/0)
except ZeroDivisionError:
    print('您不能把0作为分母') # 您不能把0作为分母

try-except-else代码

创建一个只执行除法的运算器

print('请输入分子分母')
print('输入q表示退出')
while True:
    分子 = input('请输入分子: ')
    if 分子 == 'q':
        break
    分母 = input('请输入分母: ')
    if 分母 == 'q':
        break
    try:
        答案 = int(分子)/int(分母)
    except ZeroDivisionError:
        print('分母不能为0')
    else:
        print(答案)

仅在try代码成功运执行时才需要运行的代码,放在else代码中

3.2 FlieNotFoundError异常

读取一个不存在的文件

异常 2.png

try-except处理

filename = 'C:\\Users\\Administrator\\Desktop\\404.txt'
try:
    with open(filename) as a:
        内容 = a.readlines
        print(内容)
except FileNotFoundError:
    print('您找的' + filename + '不存在')

用函数把异常处理分离主代码

def 打开文件(文件名):
    '''以只读模式打开一个文件'''
    try:
        with open(文件名) as a:
            bs = a.readlines()
    except FileNotFoundError:
        print('您找的' + 文件名 + '不存在')
    else:
        return bs

filename = 'C:\\Users\\Administrator\\Desktop\\111.txt'
文件内容 = 打开文件(filename)
print(文件内容)

3.3 不显示错误信息

pass语句,让Python什么都不要做,不显示错误信息

def 打开文件(文件名):
    '''以只读模式打开一个文件'''
    try:
        with open(文件名) as a:
            bs = a.readlines()
    except FileNotFoundError:
        pass
    else:
        return bs

filename = 'C:\\Users\\Administrator\\Desktop\\404.txt'
文件内容 = 打开文件(filename)
print(文件内容) # None

Python能决定报告哪些错误:
Python的错误处理结构能够细致地控制与用户分享错误信息的程度

4. 数据存储

模块json可以将简单的Python数据结构储存到文件中,并可再次运行

4.1 json模块

函数json.dump()接收2个实参:要储存的数据(下列中a)、用于存储数据的文件对象(下列中b)

# 导入json模块
import json

# 创建一个数字列表
a = [2, 3, 3, 4, 5]

# 指明数字列表要储存的文件名(数列)、格式(json)和路径
filename = 'C:\\Users\\Administrator\\Desktop\\数列.json'
# 以写入合适打开文件,让json能够将数据写入其中,并将其保存到变量b中
with open(filename, 'w') as b:
    # 使用json.hump()将列表(a)存储到文件(数列)中
    # 列表存储到b中,b关联filename,filename规定了文件名和json格式
    json.dump(a, b) # 桌面生成数列.json文件

json.load()读取json.dump()列表

import json

filename = 'C:\\Users\\Administrator\\Desktop\\数列.json'

with open(filename) as b:
    # 使用函数json.load加载存储在数列.json中的信息
    # json.load加载b,b关联filename,filename的路径是数列.json
    c = json.load(b)
print(c) # [2, 3, 3, 4, 5]

4.2 input数据

存储用户名字

import json

姓名 = input('请输入您的姓名: ')

filename = 'C:\\Users\\Administrator\\Desktop\\姓名.json'

with open(filename, 'w') as a:
    json.dump(姓名, a)
    print('我将记住您的姓名')

向存储用户发问候

import json
filename = 'C:\\Users\\Administrator\\Desktop\\姓名.json'
with open(filename) as a:
    姓名 = json.load(a)
    print('欢迎再次回来' + 姓名)

4.3 重构

将代码划分为一系列完成具体工作的函数,这个过程叫重构

import json

def 问候():
    '''
    问候并指出其名字
    如果没有相关文件,则创建一个
    '''
    姓名 = 'C:\\Users\\Administrator\\Desktop\\姓名.json'
    try:
        with open(姓名) as a:
            b = json.load(a)
    except FileNotFoundError:
        c = inport('请输入您的姓名: ')
        with open(姓名, 'w') as d:
            json.dump(c, d)
            print('我将记住您的姓名')
    else:
        print('欢迎回来' + b)
问候()

重构上述代码

import json
def 获取姓名():
    '''如果储存了用户姓名,就获取他它'''
    姓名 = 'C:\\Users\\Administrator\\Desktop\\姓名.json'
    try:
        with open(姓名) as a:
            b = json.load(a)
    except FileNotFoundError:
        pass
    else:
        return b

def 问候():
    '''问候用户,并指出其名'''
    姓名 = 获取姓名()
    # 如果成功获取用户名,进入if代码块
    if 姓名:
        print('欢迎回来' + 姓名)
    else:
        c = inport('请输入您的姓名: ')
        姓名 = 'C:\\Users\\Administrator\\Desktop\\姓名.json'
        with open(姓名, 'w') as d:
            json.dump(c, d)
            print('我将记住您的姓名')
问候()

继续向更简洁重构

import json
def 获取姓名():
    '''如果储存了用户姓名,就获取他它'''
    姓名 = 'C:\\Users\\Administrator\\Desktop\\姓名.json'
    try:
        with open(姓名) as a:
            b = json.load(a)
    except FileNotFoundError:
        pass
    else:
        return b

def 输入姓名():
    '''提示用户输入用户名'''
    c = inport('请输入您的姓名: ')
    姓名 = 'C:\\Users\\Administrator\\Desktop\\姓名.json'
    with open(姓名, 'w') as d:
        json.dump(c, d)
    return c
    
def 问候():
    '''问候用户,并指出其名'''
    姓名 = 获取姓名()
    # 如果成功获取用户名,进入if代码块
    if 姓名:
        print('欢迎回来' + 姓名)
    else:
        姓名 = 输入姓名()
        print('我将记住您的姓名')

问候()

每个函数都执行单一而清晰的任务,只需要调用最后一个函数,让其打印一条合适的信息

目录
一、搭建编程环境
二、变量和简单数据类型
三、列表
四、if语句
五、字典
六、用户输入和while循环
七、函数
八、
九、文件和异常

汇总Python基础入门

Python基础入门.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容