Передача данных из Excel в Word в Python 3 - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь написать скрипт, который позволяет мне читать данные из входного файла Excel (сохраненного в формате .csv, потому что кто-то сказал мне сделать это таким образом), и записывать выбранные части этих данных в текстовый документ.

Это скрипт для создания персонализированных накладных для вариантов питания участников (варианты добавляются к исходной электронной таблице).

До сих пор я создал фиктивную электронную таблицу ввода исохранен пустой файл выходных слов-пустышек (dummy.csv и dummy.txt соответственно).

Код, который я написал до сих пор, считывает электронную таблицу в терминал с некоторым форматированием, чтобы привести ее в порядок.

import csv
f = open("dummy.csv")
csv_f = csv.reader(f)
for row in csv_f:
    print('{:<15}  {:<15}  {:<20} {:<25}'.format(*row))

Вывод выглядит следующим образом: (для простоты выбор пустых блюд не изменился)

Participant ID   Breakfasts       Lunches/dinners      Snacks
1111             Full english     Risotto              Granola
1111             Full english     Risotto              Granola
1111             Full english     Risotto              Granola
1111             Full english     Risotto              Granola
1111             Full english     Risotto              Granola
1111             Full english     Risotto              Granola
1111             Full english     Risotto              Granola
1111                              Risotto              Granola
1111                              Risotto              Granola
1111                              Risotto              Granola
1111                              Risotto              Granola
1111                              Risotto              Granola
1111                              Risotto              Granola
1111                              Risotto              Granola
2222             Avocado toast    Bean chilli          Apple
2222             Avocado toast    Bean chilli          Apple
2222             Avocado toast    Bean chilli          Apple
2222             Avocado toast    Bean chilli          Apple
2222             Avocado toast    Bean chilli          Apple
2222             Avocado toast    Bean chilli          Apple
2222             Avocado toast    Bean chilli          Apple
2222                              Bean chilli          Apple
2222                              Bean chilli          Apple
2222                              Bean chilli          Apple
2222                              Bean chilli          Apple
2222                              Bean chilli          Apple
2222                              Bean chilli          Apple
2222                              Bean chilli          Apple

Моя следующая задача - как-то записать эти данные в файл слов для участника 1111, другой дляучастник 2222 и тд.Я не хочу, чтобы скрипт обязательно записывал точные данные из этих строк в файл слова, а скорее, какие бы данные ни были в этих строках, если выбор еды во входном файле будет другим.

Было бы хорошо разделить еду на Завтраки, Обеды / Обеды и Закуски в записке о доставке.

Позже я могу привести в порядок шрифт и т. Д. Я просто хочу выбрать блюдабыть там сейчас.Я также хочу, чтобы в нем было написано «7 x Полный английский», а не «Полный английский, Полный английский, Полный английский и т. Д.»

Спасибо за чтение, любая помощь будет принята с благодарностью!

Киран

1 Ответ

0 голосов
/ 20 ноября 2018

Просто для того, чтобы показать, куда вы можете обратиться с образцом, используя pandas:

import pandas as pd

df = pd.read_csv('whereverfilemayroam/filename')

    Participant ID     Breakfasts Lunches/dinners   Snacks
0             1111   Full english         Risotto  Granola
1             1111   Full english         Risotto  Granola
2             1111   Full english         Risotto  Granola
3             1111   Full english         Risotto  Granola
4             1111   Full english         Risotto  Granola
5             1111   Full english         Risotto  Granola
6             1111   Full english         Risotto  Granola
7             1111           None         Risotto  Granola
8             1111           None         Risotto  Granola
9             1111           None         Risotto  Granola
10            1111           None         Risotto  Granola
11            1111           None         Risotto  Granola
12            1111           None         Risotto  Granola
13            1111           None         Risotto  Granola
14            2222  Avocado toast     Bean chilli    Apple
15            2222  Avocado toast     Bean chilli    Apple
16            2222  Avocado toast     Bean chilli    Apple
17            2222  Avocado toast     Bean chilli    Apple
18            2222  Avocado toast     Bean chilli    Apple
19            2222  Avocado toast     Bean chilli    Apple
20            2222  Avocado toast     Bean chilli    Apple
21            2222           None     Bean chilli    Apple
22            2222           None     Bean chilli    Apple
23            2222           None     Bean chilli    Apple
24            2222           None     Bean chilli    Apple
25            2222           None     Bean chilli    Apple
26            2222           None     Bean chilli    Apple
27            2222           None     Bean chilli    Apple

Это ваш файл в фрейме данных pandas, стандартном контейнере в pandas, если хотите.И теперь вы можете сделать с ним множество статистических данных ... Просто покопайтесь немного в документах
Примеры:

df.groupby(['Participant ID', 'Breakfasts']).Breakfasts.count()

Participant ID  Breakfasts   
1111            Full english     7
2222            Avocado toast    7
Name: Breakfasts, dtype: int64

df.groupby(['Participant ID', 'Lunches/dinners'])['Lunches/dinners'].count()

Participant ID  Lunches/dinners
1111            Risotto            14
2222            Bean chilli        14
Name: Lunches/dinners, dtype: int64

КонечноВы можете разделить по идентификатору участника:

oneoneoneone = df[df['Participant ID'] == 1111]

oneoneoneone

    Participant ID    Breakfasts Lunches/dinners   Snacks
0             1111  Full english         Risotto  Granola
1             1111  Full english         Risotto  Granola
2             1111  Full english         Risotto  Granola
3             1111  Full english         Risotto  Granola
4             1111  Full english         Risotto  Granola
5             1111  Full english         Risotto  Granola
6             1111  Full english         Risotto  Granola
7             1111          None         Risotto  Granola
8             1111          None         Risotto  Granola
9             1111          None         Risotto  Granola
10            1111          None         Risotto  Granola
11            1111          None         Risotto  Granola
12            1111          None         Risotto  Granola
13            1111          None         Risotto  Granola


oneoneoneone.to_csv('target_file')

и, возможно,

twotwotwotwo.to_csv('another_target_file')

Можно также выполнять итерации по группам, а затем применять всегда одинаковые операции для каждой группы.
Например:

for name, group in df.groupby('Participant ID'):
    print(name)
    print(group.groupby('Breakfasts').Breakfasts.count().to_string())
    print(group.groupby('Lunches/dinners')['Lunches/dinners'].count().to_string())
    print(group.groupby('Snacks').Snacks.count().to_string(), '\n')

Возвращает:

1111
Breakfasts
Full english    7
Lunches/dinners
Risotto    14
Snacks
Granola    14 

2222
Breakfasts
Avocado toast    7
Lunches/dinners
Bean chilli    14
Snacks
Apple    14 
...