实验四、文件操作与异常处理 请设计如下功能的 Python 代码并进行验证(以下每个步骤均需要考虑异常!): 1、请在 D 盘(Windows 系统)或者/usr/local(Linux)下创建一个新的文件test.txt,若文件存在则需要给出是否要进行删除的提示,若用户输入y, 则删除原来的 test.txt,并新建一个新的 test.txt,否则转步骤 3; 2、在test.txt文件中随机写入10 个-1-1 的小数,保留2位小数点,并进行检查,若随机生成的数据中没有负数则重新随机,直到序列中至少有2个负数,文件中每行写1 个数字,写完之后,安全关闭文件,并给出完成提示; 3、请打开按上述方法生成的test.txt文件,读取该文件中每行的小数,并将这些数字按照从大到小的顺序进行排列形成一个字符串,并输出该字符串; 4、将3中得到的字符串中的小数点””以及小数点之前的“0”全部删除,得到一个新的字符串,并输出该字符串; 5、计算4中得到的字符串对应的表达式的值,将该值以””进行格式化后输出并追加到test.txt 的最后,安全关闭 test.txt,并给出提示。 6、将test.txt 移动至当前目录,并改名为 test_solved.txt,给出提示。
时间: 2023-06-10 13:09:11 浏览: 230
以下是实现以上功能的Python代码,已进行异常处理:
```python
import os
import random
# 步骤1
file_path = os.path.join(os.path.expanduser("~"), "test.txt")
if os.path.exists(file_path):
choice = input("文件已存在,是否删除并重新创建(y/n)?")
if choice.lower() == 'y':
os.remove(file_path)
else:
print("结束程序")
exit()
try:
with open(file_path, 'w') as f:
# 步骤2
nums = []
while len([n for n in nums if n < 0]) < 2:
nums = [round(random.uniform(-1, 1), 2) for _ in range(10)]
for n in nums:
f.write(str(n) + '\n')
print("写入文件成功")
# 步骤3
with open(file_path, 'r') as f:
nums = [float(line.strip()) for line in f.readlines()]
nums.sort(reverse=True)
nums_str = ' '.join(map(str, nums))
print("排序后的数字字符串为:", nums_str)
# 步骤4
nums_str = nums_str.replace(".", "").lstrip('0')
print("去掉小数点和前导0后的数字字符串为:", nums_str)
# 步骤5
result = eval(nums_str)
with open(file_path, 'a') as f:
f.write('\n' + "{:.2f}".format(result))
print("计算结果为:", result)
# 步骤6
os.rename(file_path, "./test_solved.txt")
print("已将test.txt重命名为test_solved.txt并移动到当前目录")
except Exception as e:
print("程序运行出现异常:", e)
finally:
if os.path.exists(file_path):
os.remove(file_path)
```
阅读全文