У меня есть файл Excel, содержащий список требований в 1 столбце, и файл JSON, в котором хранятся значения таблицы. Требования в файле Excel включают ссылки на таблицы в файле JSON в формате «таблица x», где x — число. Не каждому требованию соответствует таблица.
Например, в требовании может быть указано: «Масса CubeSat не должна превышать значения, указанные в таблице 3». Формат ссылок на таблицы в требованиях всегда — «таблица x», где x — любое число.
Это JSON-файл
{
"table 3": {
"footprint_cs_2u": "100x100 mm",
"height_cs_2u": "227 mm",
"feet_cs_2u": "8.5x8.5 mm",
"rails_edges_rounded_2u": "Rx1mm",
"footprint_cs_3u": "100x100 mm",
"height_cs_3u": "340.5 mm",
"feet_cs_3u": "8.5x8.5 mm",
"rails_edges_rounded_3u": "Rx1mm"
}
}
Что мне удалось сделать, так это прочитать и сохранить 1 столбец Excel с помощью команды .iloc[:,0] для создания кадра данных и прочитать JSON-файл.
Я видел, что вы можете использовать RegEx и команду re.search() для поиска совпадений, но я не мог понять, как это реализовать и что делать дальше. Таким образом:
import re
#Check if the string starts with "The" and ends with "Spain":
txt = "The rain in Spain"
x = re.search("^The.*Spain$", txt)
Это мой полный код, если это поможет.
import pandas as pd
import numpy as np
import json
import re
import openpyxl
def translate_requirements(input_excel, tables_json, output_latex):
# read Excel-file
df = pd.read_excel(input_excel)
# read JSON file
with open(tables_json, 'r') as file:
tables = json.load(file)
# create dataframe for 1-column Excel content.
requirements = df.iloc[:, 0]
# Initialize translated requirements (empty array)
translated_requirements = []
# Output as LaTeX file | Here: example-doc
with open(output_latex, 'w') as latex:
latex.write(r"""
\documentclass{article}
.
.
.
"""
)
translate_requirements('input.xlsx', 'tables.json', 'output_latex.tex')
print('Data read')
Пока что я могу читать файлы Excel и JSON. Однако мне нужна помощь с добавлением содержимого таблицы из JSON-файла в соответствующий столбец Excel требования, которое использует эту таблицу.
Как мне добиться такого сопоставления и впоследствии включить эту информацию в документ LaTeX?
Любая помощь или подсказки будут очень признательны!
Я все еще новичок в StackOverflow, поэтому не знаю, сколько информации необходимо, я просто хотел продемонстрировать пример и не создавать путаницы, мои извинения.
Вы можете искать table \d+
в тексте
import re
text = 'The mass of the CubeSat shall not extend the values of table 3.'
results = re.findall('table \d+', text)
print(results)
Результат:
['table 3']
А позже вы можете проверить, не пуст ли список, и сначала использовать results[0]
(или все результаты) для поиска таблицы в json.
if results:
table = tables[results[0]]
# ... work with table ...
А если у вас больше элементов, используйте цикл for
, чтобы найти все значения и внести их в список.
requirements = df.iloc[:, 0].to_list()
data = []
for text in requirements:
results = re.findall('table \d+', text)
if results:
table = tables[results[0]]
data.append( (text, table) )
а позже используйте этот список для создания латекса
но в этом месте вам предстоит решить, как его форматировать (и я это пропускаю)
with open(output_latex, 'w') as latex:
latex.write(r"\documentclass{article}\n")
for text, table in data:
latex.write(f"{text} ....{table}\n")
Я не понимаю, зачем вам регулярное выражение с
^ $
. Если вам нужно найтиtable 3
в тексте Excel, используйтеtable \d+
. А позже используйте это значение для получения данных из JSON.