【问题标题】:Print header from csv file using dictReader使用 dictReader 从 csv 文件打印标题
【发布时间】:2019-04-15 14:23:19
【问题描述】:

我是 Python 的新手,最近才开始学习它。我在阅读讲师为课堂提供的 csv 文件的标题部分时遇到问题。

我正在尝试使用 dictReader 函数来确定最高元素编号并打印具有最高元素编号的头像。对于 Aang,他的最高元素是“空气”,而嘉措的最高元素是“水”,但是,我只能将它们的最高值打印出来。我知道 dictReader 的操作方式是 for 循环只能逐行遍历 csv 文件,跳过标题。

.csv 文件:

我的代码:

print("{0:<12}|{1:>12}".format("Avatar Name", "Top Element"))
import csv
filePath = "data.csv"
with open(filePath) as csvfile:
        reader  = csv.DictReader(csvfile)
        element_air = 'Air'
        element_water = 'Water'
        element_earth = 'Earth'
        element_fire = 'Fire'
        for row in reader:
                 max_element = max(int(row['Air']),int(row['Water']),int(row['Earth']),int(row['Fire']))
                 if(max_element == row['Air']):
                      max_element = str(row[4])
                 if(max_element == row['Water']):
                      max_element = str(row[5])
                 if(max_element == row['Earth']):
                      max_element = str(row[6])
                 if(max_element == row['Fire']):
                      max_element = str(row[7])
        print("{0:<12}|{1:^5}".format(row['name'], max_element))
print("==============================================")

我尝试将 max_element 转换为字符串,但它仍会打印出相同的结果。 row[4],row[5] 等是我试图分配这个最大元素的标题。

我什至尝试分配 max_element == element_air.....element_fire 如果最大元素匹配最高值,以便打印最高值的字符串。

预期结果:

实际结果:

【问题讨论】:

  • 在你所有的 if 语句中为什么不做 max_element='Air' 等。因为你在每个循环中重新分配它应该可以正常工作。
  • @Chris 我做了一个与上面问题中所述类似的操作,只是我做了 max_element = element_air。它没有用。

标签: python python-3.x dictionary


【解决方案1】:

您不需要在每个 if 语句中重新分配 max_element,只需将这个元素打印出来

elements = ('Air', 'Water', 'Fire', 'Earth')
for row in reader:
    max_element = max(row[elem] for elem in elements)
    for element in elements:
        if row[element] == max_element:
            print("{0:<12}|{1:^5}".format(row['name'], element))
            break

【讨论】:

  • 除了“水”中的对齐问题外,它有点工作。有什么办法解决吗?
  • 这是因为您在字符串格式中使用了:^5,它等于单词“water”的长度。您可以删除此对齐选项 ("{0:&lt;12}| {1} ".format(row['name'], element)) 或增加宽度 ("{0:&lt;12}|{1:^10}".format(row['name'], element))
猜你喜欢
  • 2022-01-23
  • 2017-10-01
  • 2019-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多