繁体   English   中英

使用Python raw_input从CSV文件中获取特定值?

[英]Getting a specific value from a CSV file with Python raw_input?

目前,我有一个CSV文件,如下所示:

Element,Weight
"Hydrogen","1"
"Oxygen","16"

最终它会将所有元素和它们的原子量放在它们旁边,但是除非我首先解决这个问题,否则将所有这些元素放入其中是毫无意义的。

主要的Python程序如下:

import csv
reader = csv.reader(open("chem.csv", "rb"))

first = raw_input("Enter first element: ")
second = raw_input("Enter second element: ")

if first == "Hydrogen" or "hydrogen":
     for Weight in reader:
        print Weight

else:
     print "No."

现在,正如您可能从中可以看出的那样,我的目标是让程序显示从CSV文件中获取的氢的重量。 但是,目前它最终只显示以下内容:

Enter first element: hydrogen
Enter second element: oxygen
['Element', 'Weight']
['Hydrogen', '1']
['Oxygen', '16']

所以,基本上,我怎样才能使它进入氢气行,然后从第二列获取重量值? 我应该能够从那里开始修复程序的其余部分,但这部分让我陷入困境。

作为次要的事情,是否有可能拥有它,以便我不必拥有主要Python程序以及CSV文件中的元素列表? 它在杂乱的情况下减少了很多,但我无法理解它。

而不是迭代数据,它可能更容易以易于访问的方式存储它,例如字典映射名称到权重。 然后,您只需查找输入的字符串并显示结果(如果没有,则显示结果)。

import csv

#Read in data anbd store it in dictionary.
#The element name will be stored in lowercase.
elemen_data = { element.lower():int(weight) for element,weight in csv.reader(open("in", "rb"))}

first = raw_input("Enter first element: ")
second = raw_input("Enter second element: ")

#Look for the weight of the entered element (after converting it to all lowercase)
weight_first = elemen_data.get(first.lower())
weight_second = elemen_data.get(second.lower())

if weight_first is not None:
    print 'First Element:', first, 'Weight:', weight_first
else:
    print 'First Element', first, 'not found'

if weight_second is not None:
    print 'Second Element:', second, 'Weight:', weight_first
else:
    print 'Second Element', second, 'not found'

如果您希望能够在不触及程序的情况下轻松更改数据,那么将数据存储在您的程序逻辑之外是有意义的。 所以有一个读入的csv文件绝对没问题。 (只要数据大小合理)

问题是,当您遍历csv.reader对象时,您会收到csv文件行作为行单元格值的列表。 所以你可以尝试下一个案例:

if first in ("Hydrogen", "hydrogen"):
     for Weight in reader:
        if Weight[0] == first:
            print Weight[1]

这不是最好的代码,但它会返回您想要的值。

第一个问题:

if first == "Hydrogen" or "hydrogen":

这不会回报你想要的。 你要么:

if first == 'Hydrogen' or first == 'hydrogen':

要么

if first in ['Hydrogen', 'hydrogen']:

或者更好的是:

if first.lower() == 'hydrogen'

这适用于所有大写字母,如HYDrogen。

然后,你可以做你想做的事:

for row in reader:
    if row[0].lower() == first.lower():
        print row[1]

当然,这可以通过使用值的字典来清理一下; 你可能不希望每个元素都有一个if语句,但是你去了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM