Python 文件操作、异常处理和字符串处理实战:随机数据排序与计算
本教程将通过一个 Python 实践案例,演示如何进行文件操作、异常处理、字符串处理和表达式计算。通过完成这个实验,学生可以学会以下三种能力:
- 文件操作:包括创建、删除、写入、读取、移动、改名等。
- 异常处理:在文件操作中,可能会出现文件已存在、文件不存在、文件读写异常等多种异常情况,需要学会如何进行异常处理。
- 字符串处理和表达式计算:需要学会如何对字符串进行操作,如删除特定字符,并学会使用 Python 提供的表达式计算函数,将字符串转化为数值进行计算。
实验步骤
-
创建文件并写入随机数据
在 D 盘(Windows 系统)或者 /usr/local(Linux)下创建一个新的文件 test.txt,若文件存在则需要给出是否要进行删除的提示,若用户输入 'y',则删除原来的 test.txt,并新建一个新的 test.txt,否则转步骤 3。
在 test.txt 文件中随机写入 10 个 -1-1 的小数,保留 2 位小数点,并进行检查,若随机生成的数据中没有负数则重新随机,直到序列中至少有 2 个负数,文件中每行写 1 个数字,写完之后,安全关闭文件,并给出完成提示。
-
读取文件并排序
打开按上述方法生成的 test.txt 文件,读取该文件中每行的小数,并将这些数字按照从大到小的顺序进行排列形成一个字符串,并输出该字符串。
-
字符串处理
将 2 中得到的字符串中的小数点 '.' 以及小数点之前的 '0' 全部删除,得到一个新的字符串,并输出该字符串。
-
计算表达式并追加到文件
计算 3 中得到的字符串对应的表达式的值,将该值以 ',' 进行格式化后输出并追加到 test.txt 的最后,安全关闭 test.txt,并给出提示。
-
移动文件并改名
将 test.txt 移动至当前目录,并改名为 test_solved.txt,给出提示。
示例
已创建文件 D:\test.txt 并已写入 10 个随机数据! 从 D:\test.txt 中读取到的数据为: 0.23,0.21,0.89,0.78,-0.98,-0.45,0.23,0.11,-0.78,-0.66 排序之后得到的字符串为: 0.890.780.230.230.210.11-0.45-0.66-0.78-0.98 经过处理之后的字符串为: 897823232111-45-66-78-98 最终得到的值为:897,823,231,824 已追加该数值! 已移动到当前目录! 已改名!
代码示例
import os
import random
def create_and_write_data():
"""创建文件并写入随机数据"""
try:
# 判断文件是否存在,存在则提示用户是否删除
if os.path.exists('test.txt'):
choice = input('文件 test.txt 已存在,是否删除?(y/n): ') # 此处用单引号
if choice.lower() == 'y':
os.remove('test.txt')
print('已删除文件 test.txt!')
else:
print('已跳过删除操作!')
return
# 创建新文件
with open('test.txt', 'w') as f:
while True:
data = [round(random.uniform(-1, 1), 2) for _ in range(10)]
if sum(1 for x in data if x < 0) >= 2: # 检查负数数量
for num in data:
f.write(str(num) + '\n')
print('已创建文件 test.txt 并已写入 10 个随机数据!')
break
except Exception as e:
print(f'创建文件或写入数据时出错: {e}')
def read_and_sort_data():
"""读取文件并排序"""
try:
with open('test.txt', 'r') as f:
numbers = [float(line.strip()) for line in f]
print(f'从 test.txt 中读取到的数据为:\n{numbers}')
sorted_numbers = sorted(numbers, reverse=True)
sorted_str = ''.join(str(num) for num in sorted_numbers)
print(f'排序之后得到的字符串为:\n{sorted_str}')
return sorted_str
except Exception as e:
print(f'读取文件或排序时出错: {e}')
def process_string(sorted_str):
"""字符串处理"""
processed_str = ''.join(str(num).replace('.', '').replace('0', '') for num in sorted_str.split())
print(f'经过处理之后的字符串为:\n{processed_str}')
return processed_str
def calculate_expression(processed_str):
"""计算表达式"""
try:
result = eval(processed_str)
formatted_result = ','.join(str(result)[i:i + 3] for i in range(0, len(str(result)), 3)) # 每三位加逗号
print(f'最终得到的值为:{formatted_result}')
return formatted_result
except Exception as e:
print(f'计算表达式时出错: {e}')
def append_to_file(formatted_result):
"""追加到文件"""
try:
with open('test.txt', 'a') as f:
f.write(f'\n{formatted_result}')
print('已追加该数值!')
except Exception as e:
print(f'追加数值时出错: {e}')
def move_and_rename():
"""移动文件并改名"""
try:
os.rename('test.txt', 'test_solved.txt')
print('已改名!')
os.replace('test_solved.txt', os.path.join(os.getcwd(), 'test_solved.txt'))
print('已移动到当前目录!')
except Exception as e:
print(f'移动或改名文件时出错: {e}')
if __name__ == '__main__':
create_and_write_data()
sorted_str = read_and_sort_data()
processed_str = process_string(sorted_str)
formatted_result = calculate_expression(processed_str)
append_to_file(formatted_result)
move_and_rename()
使用方法
- 将上述代码保存为一个 Python 文件(例如:experiment.py)。
- 运行该文件,程序会自动执行所有步骤。
- 程序运行结束后,您将在当前目录下找到名为 'test_solved.txt' 的文件,该文件包含随机生成的数字、排序后的字符串、经过处理的字符串以及计算结果。
注意事项
- 代码中已经包含了部分异常处理,但为了更加完善,可以根据实际情况增加更多的异常处理代码。
- 代码中的文件路径需要根据您的实际情况进行调整。
- 代码示例仅供参考,您可以根据自己的需要进行修改和扩展。
原文地址: https://www.cveoy.top/t/topic/nKNO 著作权归作者所有。请勿转载和采集!