Создать таблицу / CSV из текстовой строки - PullRequest
0 голосов
/ 12 февраля 2019

Повторное размещение, так как это было неправильно помечено как дублированное.Это сообщение было связано , но не отвечает на мою проблему

Я новичок в Python, у меня есть текстовая строка, которая выглядит следующим образом.Мне нужна помощь в преобразовании его в таблицу.Я попытался сделать это, создав словари, однако количество столбцов в каждой строке не всегда одинаково, это создает проблему.Кроме того, в тексте есть столбцы типа «сток», которые мне не нужны в конечном выводе

После удаления пустых строк и другой информации.текстовый файл выглядит следующим образом.

XYZ
XYZ
ABC
ABC
MNP
MNP
Fruit
Apple
price
30
Number
10
Fruit
kiwi
stock
10
Number
20
Fruit
grape
price
12

Это мой желаемый вывод в формате таблицы, вторая строка должна иметь пустое значение, оставленное для цены, третья строка должна иметь пустое значение для Number.

Fruit    price    Number    
Apple    30       10    
kiwi              20    
grape    12             

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Вот мое решение, которое я хотел бы поставить на первую версию этого вопроса, если вы не хотите использовать Pandas:

#!/usr/bin/env python

import re

data = """
    XYZ
    XYZ
    ABC
    ABC
    MNP
    MNP
    Fruit
    Apple
    price
    30
    Number
    10
    Fruit
    kiwi
    Number
    20
    Fruit
    grape
    price
    12"""

def doit(data):

    table = []

    data = re.split(r'\s+', data)
    currentFruit = None
    while len(data):
        line = data.pop(0)
        if line == "Fruit":
            if currentFruit:
                table.append(currentFruit)
            currentFruit = { 'name': data.pop(0) }
        elif currentFruit:
            currentFruit[line] = data.pop(0)
    table.append(currentFruit)

    print "%-9s%-9s%-9s" % ("Fruit", "price", "Number")
    for fruit in table:
        print "%-9s%-9s%-9s" % (fruit['name'],
                                fruit['price'] if 'price' in fruit else '',
                                fruit['Number'] if 'Number' in fruit else '')

doit(data)
0 голосов
/ 12 февраля 2019

Вы можете использовать pandas для создания такой таблицы:

import pandas as pd

text = '''XYZ
XYZ
ABC
ABC
MNP
MNP
Fruit
Apple
price
30
Number
10
Fruit
kiwi
Number
20
Fruit
grape
price
12'''

data = {'Fruit': [], 'price': [], 'Number': []}
lines = text.split()
for i in range(len(lines)):
    if i+5 < len(lines) and lines[i] == 'Fruit' and lines[i+2] == 'price' and lines[i+4] == 'Number':
        data['Fruit'].append(lines[i+1])
        data['price'].append(lines[i+3])
        data['Number'].append(lines[i+5])
    elif i+3 < len(lines) and lines[i] == 'Fruit' and lines[i+2] == 'Number':
        data['Fruit'].append(lines[i+1])
        data['price'].append('')
        data['Number'].append(lines[i+3])
    elif i+3 < len(lines) and lines[i] == 'Fruit' and lines[i+2] == 'price':
        data['Fruit'].append(lines[i+1])
        data['price'].append(lines[i+3])
        data['Number'].append('')

df = pd.DataFrame(data)
print(df)

Результат:

   Fruit price Number
0  Apple    30     10
1   kiwi           20
2  grape    12       

Также вы можете сохранить результат в CSV:

df.to_csv('result.csv')
...