Python I/O和异常

Henry Lv3

字符串格式

  • 格式:format % values,format是包含任意个%字符的字符串,values是按顺序的值
    1
    2
    x = 1/81
    print('value:%.3f' % x)
  • 常用的转换符
    1
    2
    3
    4
    5
    6
    7
    8
    d               # 整数
    f # 浮点数
    s # 字符串
    o # 八进制值
    x # 小写十六进制数
    X # 大写十六进制数
    e # 小写科学计数法表示的浮点数
    E # 大写科学计数法表示的浮点数
    format格式化函数
  • 命名替换
    1
    2
    print('{who} likes {eat}'.format(who = 'Jack', eat = 'ice cream'))
    # 'Jack likes ice cream'
  • 位置替换
    1
    2
    3
    4
    5
    6
    print('{0} likes {1}'.format('Jack', 'ice cream'))
    # 'Jack likes ice cream'

    # 设置动态格式
    print('num = {x:.{d}f}'.format(x = 1/81, d = 4))
    # num = 0.0123
    读写文件
  • 种类
    • 文本文件:可以编辑,容易阅读和修改,占用空间大,对程序难读
    • 二进制文件:对人类难阅读,占用空间较小,对程序易读
  • 常用函数
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    os.getcwd()             # 返回当前工作目录名称/路径
    os.listdir(p) # 返回一个字符串列表,其中包括包含路径p指定的文件夹中所有文件和文件夹的名称
    os.chdir(p) # 将当前工作目录设置为路径p
    os.path.isfile(p) # 当路径p指定的是一个文件的名称时,返回True,否则返回False
    os.path.isdir(p) # 当路径p指定的时一个文件夹的名称时,返回True,否则返回False
    os.stat(fname) # 返回有关fname的信息,如大小(单位为字节)和最后一次修改时间

    print(os.getcwd())
    # F:\BaiduNetdiskDownload\02-Python\4.作业

    print(os.listdir(r'F:\BaiduNetdiskDownload\02-Python'))
    # ['1.视频', '2.课件', '3.代码', '4.作业', '5.预习资料']

    print(os.path.isfile(r'F:\BaiduNetdiskDownload\02-Python\1.视频\Python基础中.ev4a'))
    # True

    print(os.path.isdir(r'F:\BaiduNetdiskDownload\02-Python'))
    # True

    print(os.stat(r'F:\BaiduNetdiskDownload\02-Python\1.视频\Python基础中.ev4a'))
    # os.stat_result(st_mode=33206, st_ino=281474976710753, st_dev=8372287047776763732, st_nlink=1, st_uid=0, st_gid=0, st_size=468959841, st_atime=1767102689, st_mtime=1766142480, st_ctime=1766141229)

    import os
    def list_cwd():
    '''
    获取当前工作目录所有文件和文件夹名称列表
    '''
    # print(os.listdir(os.getcwd()))
    return os.listdir(os.getcwd())
    def files_cwd():
    '''
    返回目录下的文件列表
    '''
    # print([p for p in list_cwd() if os.path.isfile(p)])
    return[p for p in list_cwd() if os.path.isfile(p)]
    def size_in_bytes(fname):
    '''
    获取文件的大小
    '''
    return os.stat(fname).st_size
    def cwd_size_in_bytes():
    '''
    计算所有文件大小总和
    '''
    total = 0
    for name in files_cwd():
    total = total + size_in_bytes(name)
    return total
    print(cwd_size_in_bytes())
    读文件
  • 主要步骤:打开文件 ->处理文件 ->关闭文件
  • 打开模式
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    r               # 为读取而打开文件(默认)
    w # 为写入而打开文件
    a # 为在文件末尾附加而打开文件
    b # 二进制模式
    t # 文本模式(默认)
    + # 为读写打开文件

    import os
    def print_file(fname):
    '''
    每行读取
    '''
    f = open(fname,'r')
    for line in f:
    print(line, end = '') # 如果没有end = '',则会打印空行
    f.close()
    print_file(r'F:\BaiduNetdiskDownload\02-Python\4.作业\a.txt')

    # 直接读取
    print(open(r'F:\BaiduNetdiskDownload\02-Python\4.作业\a.txt', 'r').read())
    写文件
  • 注意:使用w模式,会先删除文件再生成新的文件(即使只用w打开文件不做任何操作,在关闭之后,原来的文件被删除并生成一个同名的空文件)
    1
    2
    3
    f = open('a.txt','w')
    f.write('MMMMAAAsss,\n')
    f.close()
    附件文本到结尾
  • 注意:附加模式不会删除文件已有内容,附加只会将内容附加到原文件结尾
    1
    2
    3
    f = open('a.txt','a')
    f.write('kk')
    f.close()
    附加文本到开头
  • 没有提供直接支持。可以将文件文本读取后,与新文本进行整合,再写入原来的文件。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    f = open('a.txt','r+')
    temp = f.read()
    print(temp)
    temp = 'tt' + temp
    f.seek(0) #让文件指针指向文件开头
    f.write(temp)
    f.close()
    print(open(r'F:\BaiduNetdiskDownload\02-Python\4.作业\a.txt', 'r').read())
    # kk
    # ttkk
    处理二进制文件
  • 使用rb进行读取,wb进行写入
    1
    2
    f = open(fname, 'br')
    f.read(4)
  • pickle模块方便读写二进制文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    import pickle

    def make_pickled_file():
    '''
    写入/创建二进制文件
    '''
    grades = {'alan':[1,2], 'tom':[2,3]}
    outfile = open('grandes.dat', 'wb')
    pickle.dump(grades, outfile)

    def get_pickle_data():
    '''
    读取二进制文件
    '''
    infile = open('grandes.dat', 'rb')
    grades = pickle.load(infile)
    return grades

    make_pickled_file()
    get_pickle_data()
    读取网页
  • 使用urllib模块可以方便的实现
    1
    2
    3
    4
    5
    import urllib.request

    page = urllib.request.urlopen('http://www.baidu.com') # 网页地址必须包含http://
    html = page.read()
    html[:25]
    异常
  • 引发异常
  • 手动引发异常
    1
    raise IOError('This is a test!')
  • 捕获异常
    1
    2
    3
    4
    5
    6
    7
    8
    def get_age():
    while True:
    try:
    n = int(input('age'))
    return n
    except ValueError:
    print('Please input an int')
    get_age()
  • 捕获多种异常
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # 第一种写法(统一处理异常)
    def get_age(s, base):
    try:
    n = int(s,base)
    return n
    except (ValueError, TypeError):
    return 'error'
    get_age(5, 6)

    # 第二种写法(分别处理不同异常)
    def get_age(s, base):
    try:
    n = int(s,base)
    return n
    except ValueError:
    return 'value error'
    except TypeError:
    return 'type error'
    get_age(5, 6)
  • 捕获所有异常
    1
    2
    3
    4
    5
    6
    7
    def get_age(s, base):
    try:
    n = int(s,base)
    return n
    except:
    return 'error'
    get_age(5, 6)
  • finally:无论是否发生异常,都会执行的代码块
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def get_age(s, base):
    try:
    n = int(s,base)
    return n
    except:
    return 'error'
    finally:
    print('finally activate')
    get_age(5, 6)
  • with:确保尽早执行
    1
    2
    3
    4
    5
    6
    7
    8
    num = 1
    # 普通打开文件后,不会自动关闭文件
    # f = open(r'F:\BaiduNetdiskDownload\02-Python\4.作业\a.txt', 'r')
    # 使用with语句,确保在for循环结束后,立即关闭文件
    with open(r'F:\BaiduNetdiskDownload\02-Python\4.作业\a.txt', 'r') as f:
    for line in f:
    print(line,end = '')
    num = num +1
  • 标题: Python I/O和异常
  • 作者: Henry
  • 创建于 : 2026-01-04 14:50:23
  • 更新于 : 2026-01-04 17:20:08
  • 链接: https://mybetterworks.github.io/2026/01/04/Python-IO和异常/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
Python I/O和异常