使用Python原始输入从CSV文件获取特定值?

使用Python原始输入从CSV文件获取特定值?,python,csv,Python,Csv,目前,我有一个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_i

目前,我有一个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文件中拥有本质上的元素列表?这会减少很多杂乱的东西,但我就是想不出来

问题在于,当您在csv.reader对象上迭代时,您会收到作为行单元格值列表的csv文件行。因此,您可以尝试下一步:

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

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

问题在于,当您在csv.reader对象上迭代时,您会收到作为行单元格值列表的csv文件行。因此,您可以尝试下一步:

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

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

与其对数据进行迭代,不如以易于访问的方式存储数据,例如,将名称映射到权重的字典。然后,您只需查找输入的字符串并显示结果(如果没有结果,则不显示)


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

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

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

第一个问题:

if first == "Hydrogen" or "hydrogen":
那不会给你想要的。您想要:

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

或者更好:

if first.lower() == 'hydrogen'
这将适用于所有资本化,比如氢

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

for row in reader:
    if row[0].lower() == first.lower():
        print row[1]
当然,这可以通过使用一个值字典来清理;您可能不希望每个元素都有一个
if
语句,但您可以这样做。

第一个问题:

if first == "Hydrogen" or "hydrogen":
那不会给你想要的。您想要:

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

或者更好:

if first.lower() == 'hydrogen'
这将适用于所有资本化,比如氢

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

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

当然,这可以通过使用一个值字典来清理;您可能不希望每个元素都有一个
if
语句,但这就是问题所在。

我以前见过有人提到字典可以解决这类问题。。。但我永远也不知道如何让它正常运行。谢谢你。我不认为你能就如何添加氧气给出一些建议,对吗?我假设它使用了elif,但我意识到我又一次完全陷入了困境。你可以在python文档()中详细了解字典是如何工作的,但是查找是在
elemen\u data.get(first)
中完成的。在这里,它查找作为第一个输入的内容并检索相关数据。啊,你的意思是因为大写。我一会儿再补充。但基本上你们可以把所有的字符串都转换成小写来避免这个问题。不,在这里之前,大写根本并没有问题,但无论如何,我要讲一下。我只是想知道我将如何使用必需的第二个元素。您可以使用
elemen\u data.get(second.lower())
来执行第二个元素,就像第一个元素一样。我以前见过有人提到字典可以解决这类问题。。。但我永远也不知道如何让它正常运行。谢谢你。我不认为你能就如何添加氧气给出一些建议,对吗?我假设它使用了elif,但我意识到我又一次完全陷入了困境。你可以在python文档()中详细了解字典是如何工作的,但是查找是在
elemen\u data.get(first)
中完成的。在这里,它查找作为第一个输入的内容并检索相关数据。啊,你的意思是因为大写。我一会儿再补充。但基本上你们可以把所有的字符串都转换成小写来避免这个问题。不,在这里之前,大写根本并没有问题,但无论如何,我要讲一下。我只是想知道我将如何使用必需的第二个元素。您可以像第一个一样使用
elemen\u data.get(second.lower())
执行第二个元素,干杯。不过,我想我还是按照上面的词典路线去做吧。。。等我能弄明白的时候!是的,干杯。不过,我想我还是按照上面的词典路线去做吧。。。等我能弄明白的时候!是的,大量的if语句主要是因为我才刚刚开始,所以像字典和如何创建它们之类的东西。。。对我来说有点复杂。但是,嘿,这是一个学习的过程;我想从现在起,我至少可以用CSV文件制作一本字典,这是一种进步。是的,大量的if语句主要是因为我才刚刚开始