Python案例如何保存运行结果

wen python案例 47

本文目录导读:

Python案例如何保存运行结果

  1. 保存到文本文件 (.txt)
  2. 保存到CSV文件 (.csv)
  3. 保存到JSON文件 (.json)
  4. 保存到Excel文件 (.xlsx)
  5. 保存到数据库
  6. 自动保存程序运行结果
  7. 推荐的完整案例
  8. 选择建议

在Python中保存运行结果有多种方法,下面我详细介绍几种常用的方式:

保存到文本文件 (.txt)

使用 open() 函数

# 简单写入
results = [1, 2, 3, 4, 5]
with open('results.txt', 'w', encoding='utf-8') as f:
    for result in results:
        f.write(f"{result}\n")
# 追加写入 (不覆盖原内容)
with open('results.txt', 'a', encoding='utf-8') as f:
    f.write("追加的内容\n")

保存到CSV文件 (.csv)

使用 csv 模块

import csv
data = [
    ['姓名', '年龄', '成绩'],
    ['张三', 20, 95],
    ['李四', 22, 88],
    ['王五', 21, 92]
]
# 写入CSV
with open('scores.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerows(data)
# 使用字典写入
with open('scores_dict.csv', 'w', newline='', encoding='utf-8') as f:
    fieldnames = ['姓名', '年龄', '成绩']
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerow({'姓名': '张三', '年龄': 20, '成绩': 95})

保存到JSON文件 (.json)

使用 json 模块

import json
data = {
    'user': 'admin',
    'scores': [95, 88, 92],
    'settings': {
        'theme': 'dark',
        'language': 'zh'
    }
}
# 保存为JSON
with open('data.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False, indent=4)
# 如果包含自定义对象
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def to_dict(self):
        return {'name': self.name, 'age': self.age}
person = Person('张三', 20)
with open('person.json', 'w', encoding='utf-8') as f:
    json.dump(person.to_dict(), f, ensure_ascii=False, indent=4)

保存到Excel文件 (.xlsx)

使用 pandas

import pandas as pd
# 创建DataFrame
df = pd.DataFrame({
    '姓名': ['张三', '李四', '王五'],
    '年龄': [20, 22, 21],
    '成绩': [95, 88, 92]
})
# 保存到Excel
df.to_excel('results.xlsx', index=False, sheet_name='成绩表')
# 保存到多个工作表
with pd.ExcelWriter('multi_sheet.xlsx') as writer:
    df.to_excel(writer, sheet_name='成绩表')
    df.describe().to_excel(writer, sheet_name='统计信息')

保存到数据库

SQLite (轻量级)

import sqlite3
import pandas as pd
# 创建数据库连接
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
# 创建表
cursor.execute('''
    CREATE TABLE IF NOT EXISTS students (
        id INTEGER PRIMARY KEY,
        name TEXT NOT NULL,
        age INTEGER,
        score REAL
    )
''')
# 插入数据
data = [
    ('张三', 20, 95.5),
    ('李四', 22, 88.0),
    ('王五', 21, 92.3)
]
cursor.executemany('INSERT INTO students (name, age, score) VALUES (?, ?, ?)', data)
conn.commit()
# 使用pandas直接保存
df = pd.DataFrame(data, columns=['name', 'age', 'score'])
df.to_sql('students', conn, if_exists='append', index=False)
conn.close()

自动保存程序运行结果

重定向输出

import sys
from datetime import datetime
class OutputSaver:
    """自动保存所有输出到文件"""
    def __init__(self, filename):
        self.filename = filename
        self.original_stdout = sys.stdout
    def __enter__(self):
        self.file = open(self.filename, 'a', encoding='utf-8')
        sys.stdout = self.file
        # 添加时间戳
        print(f"\n--- 运行时间: {datetime.now()} ---")
        return self
    def __exit__(self, *args):
        sys.stdout = self.original_stdout
        self.file.close()
# 使用示例
with OutputSaver('run_log.txt'):
    print("程序开始运行...")
    x = 10
    y = 20
    print(f"计算结果: {x + y}")
    print("程序运行结束")

推荐的完整案例

import pandas as pd
import json
from datetime import datetime
class TaskResult:
    """统一的结果保存类"""
    def __init__(self, task_name):
        self.task_name = task_name
        self.results = []
        self.timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    def add_result(self, data):
        """添加结果"""
        self.results.append(data)
    def save_to_csv(self, filename=None):
        """保存为CSV"""
        if filename is None:
            filename = f"{self.task_name}_{self.timestamp}.csv"
        df = pd.DataFrame(self.results)
        df.to_csv(filename, index=False, encoding='utf-8-sig')
        print(f"结果已保存到: {filename}")
    def save_to_json(self, filename=None):
        """保存为JSON"""
        if filename is None:
            filename = f"{self.task_name}_{self.timestamp}.json"
        with open(filename, 'w', encoding='utf-8') as f:
            json.dump(self.results, f, ensure_ascii=False, indent=2)
        print(f"结果已保存到: {filename}")
    def save_to_excel(self, filename=None):
        """保存为Excel"""
        if filename is None:
            filename = f"{self.task_name}_{self.timestamp}.xlsx"
        df = pd.DataFrame(self.results)
        df.to_excel(filename, index=False)
        print(f"结果已保存到: {filename}")
# 使用示例
if __name__ == "__main__":
    # 模拟计算结果
    task = TaskResult("数据统计")
    for i in range(10):
        task.add_result({
            'id': i + 1,
            'value': i * 2,
            'square': i ** 2,
            'timestamp': datetime.now().isoformat()
        })
    # 保存结果
    task.save_to_csv()
    task.save_to_json()
    task.save_to_excel()

选择建议

  1. 简单数据 → 文本文件 (.txt)
  2. 表格数据 → CSV 或 Excel (.csv, .xlsx)
  3. 复杂数据结构 → JSON (.json)
  4. 大规模数据 → 数据库 (SQLite, MySQL等)
  5. 日志记录 → 文本文件追加写入
  6. 数据分析 → CSV/Excel + pandas

根据你的具体需求选择合适的保存方式,如果需要长期存储和查询,推荐使用数据库;如果是简单的数据导出,CSV或JSON就足够了。

抱歉,评论功能暂时关闭!