You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python脚本中访问另一脚本定义的变量?

问题分析

你提到的核心误区是:单独运行reading.py后,该脚本的变量仅存在于自身的Python进程内存中,脚本运行结束后进程退出,内存会被系统回收。后续运行calculation.py是全新的独立进程,完全无法访问前一个进程的内存。而from reading import dataframe_1会重新执行reading.py的顶级代码,导致重复读取CSV,本质是因为Python导入模块时会执行模块内的所有顶级代码。

以下是几种实用解决方案:


方案1:主脚本统一调度(推荐)

将读取和计算逻辑封装为函数,通过主脚本在同一个进程内调用,避免重复读取数据。

修改reading.py

import pandas as pd

def load_data():
    # 这里放置你的CSV读取及数据处理逻辑
    dataframe_1 = pd.read_csv("your_data.csv")
    # 其他数据预处理函数也可放在此模块中
    return dataframe_1

修改calculation.py

def process_data(df):
    # 这里放置你的计算逻辑
    result = df.sum()
    return result

新增main.py

from reading import load_data
from calculation import process_data

if __name__ == "__main__":
    # 仅读取一次数据
    df = load_data()
    # 直接传递内存中的DataFrame给计算函数
    calculation_result = process_data(df)
    print(calculation_result)

运行方式:执行python main.py,所有操作在同一进程内完成,DataFrame无需重复生成。


方案2:持久化缓存数据(适合必须分开运行两个脚本的场景)

如果一定要先运行reading.py再运行calculation.py,可以将生成的DataFrame保存为高效格式(比CSV读取快得多),供calculation.py直接读取。

修改reading.py

import pandas as pd

# 读取并处理数据
dataframe_1 = pd.read_csv("your_data.csv")
# 其他数据处理逻辑...

# 保存为Pickle格式(也可选择Feather/Parquet等更高效的格式)
dataframe_1.to_pickle("dataframe_cache.pkl")

修改calculation.py

import pandas as pd

# 读取缓存好的DataFrame,无需重新读取CSV
dataframe_1 = pd.read_pickle("dataframe_cache.pkl")

# 执行计算逻辑
result = dataframe_1.mean()
print(result)

运行方式:先执行python reading.py生成缓存文件,再执行python calculation.py读取缓存进行计算。


方案3:进程间通信(复杂场景适用)

如果需要实时共享内存中的数据(比如reading.py持续运行并更新数据),可以使用Python的multiprocessing模块实现进程间通信,示例如下:

修改reading.py

import pandas as pd
from multiprocessing import Manager, Process
import calculation
import pickle

def load_and_share_data(shared_dict):
    dataframe_1 = pd.read_csv("your_data.csv")
    # 将DataFrame序列化后存入共享字典
    shared_dict['data'] = pickle.dumps(dataframe_1)

if __name__ == "__main__":
    with Manager() as manager:
        shared_dict = manager.dict()
        # 启动数据读取进程
        read_process = Process(target=load_and_share_data, args=(shared_dict,))
        read_process.start()
        read_process.join()
        
        # 启动计算进程
        calc_process = Process(target=calculation.process_shared_data, args=(shared_dict,))
        calc_process.start()
        calc_process.join()

修改calculation.py

import pandas as pd
import pickle

def process_shared_data(shared_dict):
    # 反序列化获取共享的DataFrame
    dataframe_1 = pickle.loads(shared_dict['data'])
    # 执行计算逻辑
    result = dataframe_1.max()
    print(result)

该方案适合需要持续数据交互的场景,普通需求推荐前两种方案。

内容的提问来源于stack exchange,提问作者Sirakan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 09:01:30