本教程将通过一个 Python 实践案例,演示如何进行文件操作、异常处理、字符串处理和表达式计算。通过完成这个实验,学生可以学会以下三种能力:

  1. 文件操作:包括创建、删除、写入、读取、移动、改名等。
  2. 异常处理:在文件操作中,可能会出现文件已存在、文件不存在、文件读写异常等多种异常情况,需要学会如何进行异常处理。
  3. 字符串处理和表达式计算:需要学会如何对字符串进行操作,如删除特定字符,并学会使用 Python 提供的表达式计算函数,将字符串转化为数值进行计算。

实验步骤

  1. 创建文件并写入随机数据

    在 D 盘(Windows 系统)或者 /usr/local(Linux)下创建一个新的文件 test.txt,若文件存在则需要给出是否要进行删除的提示,若用户输入 'y',则删除原来的 test.txt,并新建一个新的 test.txt,否则转步骤 3。

    在 test.txt 文件中随机写入 10 个 -1-1 的小数,保留 2 位小数点,并进行检查,若随机生成的数据中没有负数则重新随机,直到序列中至少有 2 个负数,文件中每行写 1 个数字,写完之后,安全关闭文件,并给出完成提示。

  2. 读取文件并排序

    打开按上述方法生成的 test.txt 文件,读取该文件中每行的小数,并将这些数字按照从大到小的顺序进行排列形成一个字符串,并输出该字符串。

  3. 字符串处理

    将 2 中得到的字符串中的小数点 '.' 以及小数点之前的 '0' 全部删除,得到一个新的字符串,并输出该字符串。

  4. 计算表达式并追加到文件

    计算 3 中得到的字符串对应的表达式的值,将该值以 ',' 进行格式化后输出并追加到 test.txt 的最后,安全关闭 test.txt,并给出提示。

  5. 移动文件并改名

    将 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()

使用方法

  1. 将上述代码保存为一个 Python 文件(例如:experiment.py)。
  2. 运行该文件,程序会自动执行所有步骤。
  3. 程序运行结束后,您将在当前目录下找到名为 'test_solved.txt' 的文件,该文件包含随机生成的数字、排序后的字符串、经过处理的字符串以及计算结果。

注意事项

  • 代码中已经包含了部分异常处理,但为了更加完善,可以根据实际情况增加更多的异常处理代码。
  • 代码中的文件路径需要根据您的实际情况进行调整。
  • 代码示例仅供参考,您可以根据自己的需要进行修改和扩展。
Python 文件操作、异常处理和字符串处理实战:随机数据排序与计算

原文地址: https://www.cveoy.top/t/topic/nKNO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录