-2

我正在使用 python 和 csv lib 以及 Tkinter GUI

Column1    Column2
Test1      ID1
           ID2
           ID3
Test2      Act1
           ACT2
           ACT3

我想根据 Column1 测试编号显示 column2。
例如:SO Test1 被选中 ID1 , ID2, ID3 应该被显示并且在下一次迭代中当 Test2 被选中 Act1, Act2, Act3 被显示

我尝试了什么:

with open('Test.csv') as f:
  listbox = tk.Listbox(self.root, width=162, height=200)
  listbox.place(x=10, y=50)
  reader = csv.DictReader(f, delimiter=',')
  for row in reader:
    adata1 = row['column1']
    adata2 = row['column2']

    if adata1 != adata1 or adata1 == "":
      listbox.insert('end', adata2)
    else:
      continue

请如果有人可以帮助我。

4

1 回答 1

0

根据我的理解,Test.csv文件的内容是这样的:

column1,column2
Test1,ID1
,ID2
,ID3
Test2,ACT1
,ACT2
,ACT3

然后您可以使用字典来存储 CSV 文件内容:

import csv

tests = {}
with open('Test.csv') as f:
    reader = csv.DictReader(f, delimiter=',')
    for row in reader:
        if row['column1']:
            key = row['column1']
            tests[key] = []
        tests[key].append(row['column2'])

结果tests将是:

{'Test1': ['ID1', 'ID2', 'ID3'], 'Test2': ['ACT1', 'ACT2', 'ACT3']}

listbox您可以根据您选择的键填充所需的项目:

listbox = tk.Listbox(self.root, width=162, height=200)
listbox.place(x=10, y=50)

...

key = 'Test1' # assume Test1 is selected as the key

listbox.delete(0, 'end')
for item in tests[key]:
    listbox.insert('end', item)
于 2021-09-08T15:46:12.710 回答