Сохраните каждую строку таблицы Excel с заголовком в отдельном .txt-файле (сохраненный как образец-образец, который будет считан программами моделирования) - PullRequest
0 голосов
/ 14 января 2020

Я - специалист по моделированию энергии здания с Excel-вопросом, который позволяет автоматизировать крупномасштабное моделирование с использованием выборок параметров (выборок, созданных с использованием метода Монте-Карло). Теперь у меня возникает следующий вопрос при сохранении моих образцов:

Я хочу сохранить каждую строку таблицы 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-файле ('header равно значению;').

Есть ли надстройка Excel, которая делает это, или лучше использовать некоторые VBA-код? Кто-нибудь есть идея?

(У меня нет опыта в имитационном моделировании, но не в программировании, поэтому этот довольно простой вопрос сохранения параметров в Excel. (Решения в Python также приветствуются, если это проще для вы, люди))

Ответы [ 3 ]

2 голосов
/ 14 января 2020

Моя идея состоит в том, чтобы использовать Python вместе с Pandas, поскольку это одно из самых гибких решений, поскольку ваш вариант использования может расшириться в будущем.

Я попытаюсь сделать это как просто, насколько это возможно. Хотя я предполагаю, , что у вас есть Python, что вы знаете, как устанавливать пакеты через pip или conda и готовы запустить скрипт python в любой системе, которую вы используете ,

Сначала ваш сценарий должен импортировать pandas и прочитать файл в DataFrame:

import pandas as pd

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

(Обратите внимание, что вам может потребоваться установить пакет xlrd, в дополнение to pandas)

Теперь у вас есть мощная структура данных, которой вы можете манипулировать различными способами. Я думаю, что наиболее интуитивно понятным, будет l oop по всем пунктам. Используйте форматирование строк, которое лучше всего объяснить здесь и соедините строки так, как вам нужно:

outputs = {}

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

теперь вам просто нужно записать в файл, используя python ' с * метод open. Я просто назову файлы по индексу строки, но это решение перезапишет более старые текстовые файлы, созданные предыдущими запусками этого скрипта. Вы можете добавить что-то уникальное, например, дату и время или имя файла, который вы прочитали, или увеличить имя файла с помощью нескольких прогонов скрипта, например, например, this .

* 1029. * Все вместе мы получаем:
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

Обратите внимание, что это, вероятно, не самый элегантный способ, и что есть один вкладыш, но, поскольку вы не программист, я подумал, что вы могли бы предпочесть более интуитивный способ, что вы можете легко настроить себя.

1 голос
/ 14 января 2020

Я получил это для работы в Excel. Вы можете расширить длину переменных x, y и z, чтобы они соответствовали вашей ситуации, и использовать методы LastRow, LastColumn, чтобы найти измерения вашего набора данных. Я назвал исходную таблицу «Данные», как показано ниже.

Sub TestExportText()

    Dim Hdr(1 To 4) As String
    Dim x As Long
    Dim y As Long
    Dim z As Long

    For x = 1 To 4
        Hdr(x) = Cells(1, x)
    Next x

    x = 1
    For y = 1 To 5

        ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
        ActiveSheet.Name = y
        For z = 1 To 4
        With ActiveSheet
                .Cells(z, 1) = Hdr(z) & "=" & Sheets("Data").Cells(x + 1, z) & ";"
        End With
        Next z
        x = x + 1
        ActiveSheet.Move
        ActiveWorkbook.ActiveSheet.SaveAs Filename:="File" & y & ".txt", FileFormat:=xlTextWindows
        ActiveWorkbook.Close SaveChanges:=False
    Next y

End Sub
1 голос
/ 14 января 2020

Если вы можете сохранить электронную таблицу Excel в виде файла CSV, тогда этот сценарий python сделает то, что вы хотите.

with open('data.csv') as file:
    data_list = [l.rstrip('\n').split(',') for l in file]

counter = 1

for x in range (1, len (data_list)) :
    output_file_name = str (counter) + '.txt'
    with open (output_file_name, 'w' ) as file :
        for x in range (len (data_list [counter])) :
            print (x)
            output_string = data_list [0] [x] + '=' + data_list [counter] [x] + ';\n'
            file.write (output_string)
    counter += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...