Python I/O和异常
字符串格式
- 格式:format % values,format是包含任意个%字符的字符串,values是按顺序的值
1
2x = 1/81
print('value:%.3f' % x) - 常用的转换符format格式化函数
1
2
3
4
5
6
7
8d # 整数
f # 浮点数
s # 字符串
o # 八进制值
x # 小写十六进制数
X # 大写十六进制数
e # 小写科学计数法表示的浮点数
E # 大写科学计数法表示的浮点数 - 命名替换
1
2print('{who} likes {eat}'.format(who = 'Jack', eat = 'ice cream'))
# 'Jack likes ice cream' - 位置替换读写文件
1
2
3
4
5
6print('{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
49os.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
20r # 为读取而打开文件(默认)
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
3f = open('a.txt','w')
f.write('MMMMAAAsss,\n')
f.close() - 注意:附加模式不会删除文件已有内容,附加只会将内容附加到原文件结尾附加文本到开头
1
2
3f = open('a.txt','a')
f.write('kk')
f.close() - 没有提供直接支持。可以将文件文本读取后,与新文本进行整合,再写入原来的文件。处理二进制文件
1
2
3
4
5
6
7
8
9
10f = 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
2f = 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
20import 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
5import 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
8def 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
7def 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
9def 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
8num = 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 进行许可。
评论