Как транспонировать каждые несколько строк, которые начинаются с определенной строки в столбцы? - PullRequest
0 голосов
/ 22 июня 2019

Я хотел бы спросить, как транспонировать каждые несколько строк в столбцы и сохранять в текстовый файл, используя python? Я приложил вход и ожидаемый результат в следующей части. В зависимости от ввода я хотел бы выбрать все строки, которые начинаются с «числа», а затем транспонировать в столбцы.

Наконец, я хотел бы сохранить ожидаемый вывод в текстовый файл.

ввод:

number 
12
apple
13
banana
14
number
1
carrot
2
cucumber
3
number 
11
pen
10

ожидаемый результат:

number    12     apple     13     banana       14
number    1      carrot    2      cucumber     3
number    11     pen       10

Любая помощь будет оценена. Спасибо!

Ответы [ 2 ]

0 голосов
/ 22 июня 2019

Существуют и другие вопросы о чтении и записи текстовых файлов, поэтому я оставлю эти биты вам в качестве упражнения.

Скажем, у вас уже есть входной файл, загруженный как records:

records = ['number', '12', 'apple', '13', 'banana', '14', 'number', '1', 'carrot', '2', 'cucumber', '3', 'number', '11', 'pen', '10']

То, что вы хотите сделать, это циклически повторять каждый record, и, если это 'number', создать новую строку, а затем добавить record в самую последнюю строку.Этот код делает это:

rows = []
for record in records:
    if record == 'number':
        # Create a new row
        rows.append([])
    # Append to the last row
    rows[-1].append(record)

rows будет таким:

[['number', '12', 'apple', '13', 'banana', '14'],
 ['number', '1', 'carrot', '2', 'cucumber', '3'],
 ['number', '11', 'pen', '10']]
0 голосов
/ 22 июня 2019

Сначала давайте загрузим данные в память:

with open('input.txt', 'r') as data:
    info = data.read()
info = info.split()

Теперь давайте объединим данные в (name, number) кортежи:

list_of_tuples = [(name, int(info[index+1])) for name, index in enumerate(info)]

Теперь найдите ваши строки:

list_of_rows = []
cur_row = []
for tuple in list_of_tuples:
    if tuple[0] == 'number':
         if len(cur_row) > 0:
              list_of_rows.append(cur_row)
              cur_row.clear()
         cur_row.append(tuple)
list_of_rows.append(cur_row)

Теперь загрузите его в текстовый файл:

with open('out.txt', 'w') as out:
     for row in list_of_rows:
          out.write('\t'.join(row))

Код был скомпилирован с умом, поэтому дайте мне знать, если у вас возникнут проблемы ...

...