Python3 File方法详解:关键操作与实例

0 下载量 52 浏览量 更新于2024-08-28 收藏 73KB PDF 举报
Python3文件操作方法提供了丰富的功能,以便开发者在处理文本、二进制数据以及其他类型的文件时更加高效和精确。本篇文章将详细介绍Python3中关于File对象的13种主要方法,这些方法在文件的读写、控制和管理方面起着关键作用。 1. `file.close()`: 这个方法用于关闭一个已经打开的文件,确保资源被释放。调用`fileObject.close()`后,文件会被关闭,禁止进一步的读写操作。尽管可以多次调用close(),但最好在程序结束时确保关闭文件,以防止数据丢失或资源泄露。 2. `file.flush()`: `flush()`方法用于立即清除文件对象的缓冲区,确保写入的数据被物理地写入磁盘,即使在文件关闭之前也可以使用它来同步数据。通常,文件关闭时会自动刷新,但在需要确保数据即时保存的情况下,主动调用flush()是有益的。 3. `file.fileno()`: 这个方法返回一个整型的文件描述符(file descriptor, FD),它是操作系统用于与文件交互的底层接口。在某些高级操作(如多线程、异步I/O)中,可能需要使用文件描述符。 4. `file.isatty()`: 用于检查文件是否连接到一个终端设备,例如命令行界面。如果文件来自终端,isatty()返回True,这对于处理交互式输入和输出很有用。非终端设备(如普通文件)则返回False。 5. `file.next()`: 在Python 3中,`next()`函数已被迭代器协议取代,不再适用于File对象。如果你想通过迭代器逐行读取文件,应使用`for`循环或`fileObject.readline()`。 6. `file.read()`: `read()`方法用于一次性读取文件中的指定字节数。可以指定一个参数(如bytes值)来限制读取量,如果不指定,则读取到文件结束。 7. `file.readline()`: 读取文件的一行数据,直到遇到换行符`\n`为止。返回的字符串不包含换行符。 8. `file.readlines()`: 读取文件的所有行,直到文件结束或达到指定的分隔符,返回一个包含所有行的列表。 9. `file.seek()`: 用于移动文件的读取指针到指定的位置。可以接收偏移量和可选的模式参数,如`SEEK_SET`(从头开始)、`SEEK_CUR`(从当前位置)或`SEEK_END`(从末尾)。 10. `file.tell()`: 返回文件的当前位置,即读取指针的位置。 11. `file.truncate()`: 截断文件,将文件长度设置为指定位置,如果未提供位置,则默认截断到文件的当前末尾。 12. `file.write()`: 向文件中写入指定的字符串。此操作会追加到文件的末尾,除非在写入前先调用`seek()`将指针移动到开头。 13. `file.writelines()`: 用于一次写入多个字符串,每个字符串之间由默认的换行符分隔。这个方法适合写入多行文本。 理解并熟练掌握这些File对象的方法,是进行Python文件操作的基础,无论是处理文本文件还是二进制文件,都能有效提升代码的效率和可维护性。在实际编程中,根据具体需求灵活运用这些方法,能更好地实现文件的读取、写入和管理。

``` import pandas as pd from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestRegressor from sklearn.metrics import mean_squared_error, r2_score import numpy as np import os from glob import glob # 配置路径 input_folder = "microalgae" # 请替换为实际文件夹路径 output_folder = "随机森林结果" # 结果输出路径 # 创建输出文件夹(如果不存在) os.makedirs(output_folder, exist_ok=True) # 获取所有Excel文件 file_list = glob(os.path.join(input_folder, "*.xlsx")) + glob(os.path.join(input_folder, "*.xls")) # 定义公共参数 features = ['T', 'Ph', 'Biomass', 'Time', 'Qe', 'Initial'] target_column = 'Removal' # 新增:初始化汇总结果列表 all_results = [] for file_path in file_list: try: # 生成结果文件名 base_name = os.path.basename(file_path) output_name = f"{os.path.splitext(base_name)[0]}模型评估结果.xlsx" output_path = os.path.join(output_folder, output_name) print(f"\n正在处理文件:{base_name}") # 加载数据 df = pd.read_excel(file_path) df.columns = df.columns.str.strip() # 添加交互项 df['Qe'] = df['Removal'] * 0.01*df['Initial']/df['Biomass'] # 分割数据集 X = df[features] y = df[target_column] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 建模训练 clf = RandomForestRegressor(n_estimators=100, random_state=42) clf.fit(X_train, y_train) # 预测与评估 y_pred = clf.predict(X_test) y_train_pred = clf.predict(X_train) # 计算指标 metrics = { '训练集 MSE': mean_squared_error(y_train, y_train_pred), '测试集 MSE': mean_squared_error(y_test, y_pred), '训练集 RMSE': np.sqrt(mean_squared_error(y_train, y_train_pred)), '测试集 RMSE': np.sqrt(mean_squared_error(y_test, y_pred)), '训练集 R²': r2_score(y_train, y_train_pred), '测试集 R²': r2_score(y_test, y_pred) } # 保存单个文件结果 results_df = pd.DataFrame({ '数据集': ['训练集', '测试集'], 'MSE': [metrics['训练集 MSE'], metrics['测试集 MSE']], 'RMSE': [metrics['训练集 RMSE'], metrics['测试集 RMSE']], 'R²': [metrics['训练集 R²'], metrics['测试集 R²']] }) results_df.to_excel(output_path, index=False) # 新增:收集汇总数据 summary_data = { '文件名': base_name, '训练集MSE': metrics['训练集 MSE'], '测试集MSE': metrics['测试集 MSE'], '训练集RMSE': metrics['训练集 RMSE'], '测试集RMSE': metrics['测试集 RMSE'], '训练集R²': metrics['训练集 R²'], '测试集R²': metrics['测试集 R²'] } all_results.append(summary_data) print(f"已保存结果至:{output_path}") except Exception as e: print(f"处理文件 {base_name} 时发生错误:{str(e)}") continue # 新增:保存汇总结果 if all_results: summary_df = pd.DataFrame(all_results) summary_path = os.path.join(output_folder, "随机森林模型评估汇总结果.xlsx") summary_df.to_excel(summary_path, index=False) print(f"\n所有结果已汇总保存至:{summary_path}") else: print("\n警告:未生成任何结果文件") print("\n所有文件处理完成!")```根据上述代码,写一个GBM模型的代码

2025-03-09 上传