【问题标题】:Transferring data from excel to word in python 3在python 3中将数据从excel传输到word
【发布时间】:2018-11-20 12:32:27
【问题描述】:

我正在尝试编写一个脚本,允许我从输入的 excel 文件中读取数据(保存为 .csv 格式,因为有人告诉我这样做),并将这些数据的选定部分写入 word 文档.

这是一个脚本,用于为参与者的膳食选择创建个性化的送货单(这些选择会累积添加到输入电子表格中)。

到目前为止,我已经创建了一个虚拟输入电子表格,并保存了一个空白的虚拟输出 word 文件(分别为 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 的 word 文件,参与者 2222 的另一个文件,依此类推。我不希望脚本必须将这些行中的确切数据写入 word 文件,而是如果输入文件中的食物选择不同,这些行上可能存在的任何数据。

最好在输出交货单上将餐点分为早餐、午餐/晚餐和小吃。

我可以稍后整理字体等,我只希望现在可以选择餐点。 我还想让它说“7 x Full English”,而不是“Full English、Full English、Full English 等”。

感谢您的阅读,任何帮助将不胜感激!

基兰

【问题讨论】:

  • 如果您想读入 csv 文件,但又如您所说的那样进行计数等计算,我建议您使用 pandas。这样,将子组单独写入不同的文件也没有问题。但老实说,直到现在我还没有真正明白你到底想做什么......
  • 感谢您的回复 - 我真的对此非常陌生,所以请原谅我不清楚。我正在尝试创建一个 python 脚本,该脚本在执行时会打开一个主电子表格(已在其中输入了该周所有参与者的膳食选择),选择参与者 1111 的所有选择并输出一个送货单,列出所有当周送餐给参与者 1111。输出将包含参与者 ID (1111)、早餐:7 x 全英语、午餐/晚餐:14 x 意大利调味饭,等等。然后,对所有参与者重复相同的任务。
  • 没有理由原谅 - 我认为你真的应该仔细看看熊猫。它已经是一个非常强大的数据分析工具,并且正在积极开发中。如果我查看你的个人资料,我想你会很乐意在未来一次又一次地使用它......
  • 非常感谢,我会调查的!

标签: python excel python-3.x csv file-handling


【解决方案1】:

只是为了展示您可以使用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 中的标准容器。现在您可以用它大量做一些统计数据...只需通过 docs 挖掘一点
例子:

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

当然你可以通过 Participant ID 来区分:

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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多