首页 > 解决方案 > 将每个带有标题的 Excel 电子表格行保存在单独的 .txt 文件中(保存为参数样本以供模拟程序读取)

问题描述

我是一名建筑能源模拟建模师,有一个 Excel 问题,可以使用参数样本(使用 Monte Carlo 生成的样本)进行自动化大规模模拟。现在我在保存样本时有以下问题:

我想以“特殊”方式将 Excel 电子表格的每一行保存在单独的 .txt 文件中,以供模拟程序读取。

假设,我有以下 excel 文件,下面有 4 个参数(a、b、c、d)和 20 个值:

a    b    c    d
2    3    5    7
6    7    9    1
3    2    6    2  
5    8    7    6
6    2    3    4

该电子表格的每一行代表一个模拟参数样本。我想将每一行存储在一个单独的 .txt 文件中,如下所示(因此此电子表格有 5 个“.txt”文件):

“1.txt”应包含:

a=2;
b=3;
c=5;
d=7;

“2.txt”应包含:

a=6;
b=7;
c=9;
d=1;

对于文件“3.txt”、“4.txt”和“5.txt”,依此类推。

因此,基本上将标题与其对应的值匹配在单独的 .txt 文件中的每一行(“标题等于值;”)。

是否有执行此操作的 Excel 加载项,还是使用一些 VBA 代码更好?有人有什么想法吗?

(我在模拟建模方面没有经验,但在编程方面没有经验,因此在 Excel 中这个相当简单的参数样本保存问题。(如果这对你们来说更容易,也欢迎使用 Python 中的解决方案))

标签: pythonexcelvba

解决方案


我的想法是一起使用PythonPandas因为它是最灵活的解决方案之一,因为您的用例将来可能会扩展。

我会尽量让这件事变得简单。尽管我假设您拥有 Python,但您知道如何通过pipor安装软件包,conda并且准备好在您使用的任何系统上运行 python 脚本。

首先,您的脚本需要将pandas文件导入并读入DataFrame

import pandas as pd

df = pd.read_xlsx('path/to/your/file.xlsx')

(请注意,您可能需要安装该xlrd软件包,除了pandas

现在您拥有了一个强大的数据结构,您可以通过多种方式对其进行操作。我想最直观的方法是遍历所有项目。使用字符串格式,这是最好的解释here并按照您需要的方式将字符串放在一起:

outputs = {}

for row in df.index:
    s = ""
    for col in df.columns:
        s += "{}={};\n".format(col, df[col][row])
    print(s)

现在您只需要使用 python 的 io 方法写入文件open。我将仅通过行的索引来命名文件,但此解决方案将覆盖较早运行此脚本创建的较旧的文本文件。你可能不想添加一些独特的东西,比如日期和时间或你读到的文件的名称,或者通过多次运行脚本来进一步增加文件名,例如这样

我们一起得到:

import pandas as pd

df = pd.read_excel('path/to/your/file.xlsx')
file_count = 0

for row in df.index:
    s = ""
    for col in df.columns:
        s += "{}={};\n".format(col, df[col][row])

    file = open('test_{:03}.txt'.format(file_count), "w")
    file.write(s)
    file.close()

    file_count += 1

请注意,这可能不是最优雅的方式,并且有一个衬里,但由于您不是程序员,我认为您可能更喜欢更直观的方式,您可以轻松地调整自己。


推荐阅读