文件处理是指在Python程序中对文件进行读取、写入和操作的过程。Python提供了内置的文件操作函数和方法,可以打开文件、读取文件内容、写入文件内容、关闭文件等。常用的文件处理函数包括open()、read()、write()和close()等。文件处理可以用于读取文本文件、处理CSV文件、操作二进制文件等。

异常处理是指在程序运行过程中遇到错误或异常情况时,通过捕获和处理异常来保证程序的正常执行。Python提供了异常处理机制,可以使用try-except语句来捕获可能发生的异常,然后在except语句块中处理异常。常见的异常类型包括FileNotFoundError(文件不存在错误)、IOError(输入输出错误)、ValueError(值错误)等。通过合理地处理异常,可以使程序更加健壮和可靠。

示例

1
2
3
4
5
6
7
8
9
10
11
$ try:
file = open("example.txt", "r") # 打开文件
content = file.read() # 读取文件内容
print(content)
file.write("Hello, World!") # 写入文件
except FileNotFoundError:
print("文件不存在!")
except IOError:
print("文件读写错误!")
finally:
file.close() # 关闭文件

练习

编写一程序,在c:\chfile目录下创建文件source1.txt,输入5行字符,文件内容任意(其中包含英文大、小写字符、数字字符 )。
注:若目录不存在,先建立目录(导入os模块)

1
2
3
4
5
6
7
8
9
10
11
12
$ import os
dir_path = "c:\\chfile"
if not os.path.exists(dir_path):
os.makedirs(dir_path)
white_file = os.path.join(dir_path, "source1.txt")
with open(white_file, "w") as file:
file.write("hellow\n")
file.write("id\n")
file.write("student\n")
file.write("hahah AI\n")
file.write("想知道就不告诉你")
print("文件 source1.txt 已创建并写入内容")

练习

计算运动会某个参赛选手的得分。假设共有10个裁判,每个裁判给该参赛选手打分(分值在0~10分之间),去掉一个最高分和一个最低分之后的平均分即为该运动员的最后得分。某位选手的得分数据如下:
9.37  9.56 9.97 10 9.85  9.76 9.85  9.51 9.18 9.93
各数据之间使用一个空格分隔。请编写程序从文件中读取该选手的成绩并计算最后得分,并将得分写在文件末。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ with open("scores.txt", "w") as file:
data = "9.37 9.56 9.97 10 9.85 9.76 9.85 9.51 9.18 9.93"
file.write(data)
with open("scores.txt", "r") as file:
scores_re = file.readline()
scores = [float(score) for score in scores_re.split()]
if len(scores) >= 2:
min_score = min(scores)
max_score = max(scores)
scores.remove(min_score)
scores.remove(max_score)
average_score = sum(scores) / len(scores)
print("该参赛选手的最后得分为:", average_score)
with open("scores.txt", "a") as file:
file.write("\n最后得分: " + str(average_score))
else:
print("无法计算最后得分,因为分数数量不足。")

练习

文件score1.txt保存了学生的平时成绩和期末成绩,内容如下:
学号,平时成绩,期末成绩
2022001,86,97
2022002,93,85
2022003,78,90
2022004,79,86
2022005,84,89
2022006,90,75
编写程序读取所有成绩,计算总评成绩(四舍五入到整数),其中总评成绩=平时成绩40%+期末成绩60%。最后按总评成绩降序排列后保存至一个新的文件内

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ with open("score1.txt", 'w') as file:
file.write("学号,平时成绩,期末成绩,总评成绩 \n")
file.write("2022001,86,97 \n")
file.write("2022002,93,85\n")
file.write("2022003,78,90 \n")
file.write("2022004,79,86 \n")
file.write("2022005,84,89\n")
file.write("2022006,90,75\n")
scores = []
with open("score1.txt", 'r') as file:
lines = file.readlines()
for line in lines[1:]:
data = line.strip().split(',')
id = data[0]
regular = fl(data[1])
final = int(data[2])
total = round(regular * 0.4 + final * 0.6)
scores.append((id, regular, final, total))
scores.sort(key=lambda x: x[3], reverse=True)
with open("score1.txt", 'w') as file:
file.write("学号,平时成绩,期末成绩,总评成绩\n")
for score in scores:
file.write(f"{score[0]},{score[1]},{score[2]},{score[3]}\n")

练习

期末考试6名考生3门课程的成绩如下:
学号,英语,数学,计算机程序设计
20210101,78,90,88
20210102,89,77,65
20210103,76,87,90
20210104,78,80,86
20210105,87,90,89
20210106,76,89,85 将6位同学的成绩保存至文本文件score.csv,读取score.csv文件内容,计算每位同学的总分,并将总分添加至相应同学的最后列;统计每门课程的平均分,将统计结果写入到文件的末。(注:可以将统计处理后的数据另写入到score1.scv文件)

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
$ with open("score.csv", 'w') as file:
file.write("学号,英语,数学,计算机程序设计 \n")
file.write("20210101,78,90,88 \n")
file.write("20210102,89,77,65\n")
file.write("20210103,76,87,90 \n")
file.write("20210104,78,80,86 \n")
file.write("20210105,87,90,89\n")
file.write("20210106,76,89,85\n")
scores = []
with open("score.csv", 'r') as file:
lines = file.readlines()
header = lines[0].strip().split(',')
for line in lines[1:]:
data = line.strip().split(',')
user = data[0]
subject = [int(i) for i in data[1:]]
total = sum(subject)
scores.append([user] + data[1:] + [str(total)])
num_subjects = len(header) - 1
avg_scores = ["平均分"]
for i in range(num_subjects):
subject = [int(score[i + 1]) for score in scores]
avg_score = sum(subject) / len(subject)
avg_scores.append(str(round(avg_score, 2)))
header.append("总分")
with open("score1.csv", 'w') as file:
file.write(','.join(header) + '\n')
for i in scores:
file.write(','.join(i) + '\n')
file.write(','.join(avg_scores))