Как отформатировать результат из файла csv, чтобы он больше походил на таблицу

#python #csv #format #tabular

#python #csv #формат #табличный

Вопрос:

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

 ['1000.3', '', '']
['Coke Can', '1.1', '100']
['Bread', '0.7', '30']
['Spaghetti', '1.2', '100']
['Tomato Sauce', '0.8', '100']
['Bin Bags', '2.5', '4']
Enter anything to return to main menu


-----------------------------
Shop has 1000.30 in cash
-----------------------------
| Product             |  Qty |
-----------------------------
| Coke Can            | 00100|
|----------------------------|
| Bread               | 00030|
|----------------------------|
| Spaghetti           | 00100|
|----------------------------|
| Tomato Sauce        | 00100|
|----------------------------|
| Bin Bags            | 00004|
|----------------------------|


 

def two():
    with open('../stock.csv') as csvfile:
        readCSV = csv.reader(csvfile, delimiter=',')
        first_row = next(readCSV)
        print(first_row)
        for row in readCSV:
            print(row)
    anykey=input("Enter anything to return to main menu")
    mainMenu()   

#main routine
mainMenu()
  

Комментарии:

1. Вы можете использовать pandas вместо написания функции. Написание функции займет больше времени. Но для этого вам нужно внести небольшие изменения в свой csv-файл, если вы хотите, чтобы ваша таблица выглядела так, как вы показали в своем вопросе.

Ответ №1:

Просто немного поиграв с инструкцией print, вы сможете добиться этого с легкостью.

 import csv
fields = [] 
filename = "stock.csv"
with open(filename, 'r') as csvfile:
    csvreader = csv.reader(csvfile) 
    fields = next(csvreader)
    print('-'*40)
    print(f'Shop has {fields[0]} in cash')
    print('-'*40)
    for row in csvreader:
        print('-'*40)
        print('| ', row[0], ' '*(24-len(row[0])),'| ', row[2],' '*2, '|')
        print('-'*40)
  

Комментарии:

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

2. Работал отлично. Большое вам спасибо.