我有一个评估要做,到目前为止这是我的代码:
number1 = input("Number1? ")
number2 = input("Number2? ")
packages = csv.reader(open('lol.txt', newline='\n'), delimiter=',')
for PackName,PriceAdultString,PriceChildString in packages:
n += 1
PriceAdult = float(PriceAdultString)
PriceChild = float(PriceChildString)
print("%i. %17s - $%4.2d / $%4.2d" % (n, PackName, PriceAdult, PriceChild))
NameChoice = input("Which name would you like? Choose using a number: ")
csv.reader使用的lol.txt包含以下内容:
herp,123,456
derp,321,654
hurr,213,546
现在,我需要能够使用NameChoice从文件中检索一行,并使用name,number1和number2中的数据,因此对于NameChoice == 1,name = herp,number1 = 123和number 2 = 456,数字必须是浮点数。
我无法解决这个问题,并且如果可能的话可以使用一些指导。
谢谢大家。
在被问到之前,我意识到我忘了提到:我已经用Google搜索,并浏览了Python指南和我的教科书。不过,我并不完全相信我知道自己在寻找什么。
遇到新问题: 我需要能够使用'\ n \ n'而不是'\ n'来使用CSV文本,因此文本更像是以下内容:
herp,123,456
derp,321,654
hurr,213,546
我使用的(非常轻微调整的)Li-Aung代码版本:
import csv
with open ("lol.txt",'rt', newline = '\n\n') as f:
csv_r = csv.reader (f)
entries = [ (name, float(p1), float(p2)) for name, p1, p2 in csv_r]
for index, entry in enumerate(entries):
print ("%2i. %-10s %5.2f %5.2f" % (index, entry[0], entry[1], entry[2]))
choice = int(input("Choose a number: "))
print (entries[choice])
返回异常:
Traceback (most recent call last):
File "C:/Python32/eh", line 2, in <module>
with open ("lol.txt",'rt', newline = '\n\n') as f:
ValueError: illegal newline value:
现在,调试非常清楚 - '\ n \ n'作为换行符说明符是不可接受的,但我想知道是否有办法解决这个问题?
注意:搞砸了之前的编辑,代码中带有“newline ='\ n'”的调试应该是:
Traceback (most recent call last):
File "C:/Python32/eh", line 4, in <module>
entries = [ (name, float(p1), float(p2)) for name, p1, p2 in csv_r]
File "C:/Python32/eh", line 4, in <listcomp>
entries = [ (name, float(p1), float(p2)) for name, p1, p2 in csv_r]
ValueError: need more than 0 values to unpack
这是因为它将每个有用行之间的0值作为一行处理空白区域,就像它被告知要做的那样,并且那里没有任何内容。
答案 0 :(得分:2)
@mata有权利,但我觉得有必要在评论中详细说明他们的回答。
由于你需要回顾你的数据而不是仅仅打印它,所以有必要让它以某种方式存在。一旦达到这一点,您需要担心的最重要的事情是使用何种数据结构 - 如果您选择的数据结构与您希望如何使用数据非常匹配,则代码变得非常简单。
所以,你的逻辑看起来像:
由于用户输入是一个数字,表示数据在文件中的位置,list
是一个显而易见的选择。如果您使用其中一个现有字段作为查找,dict
会更好地为您服务。
如果你这样做:
data = list(csv.reader(open('lol.txt', newline='\n'), delimiter=','))
,你可以按照当前使用文件的方式来打印菜单,除了数据附近,并且使用你输入的数字是直接有意义的。
您可能更喜欢将数字存储为数字类型而不是字符串;它会很有意义,但是弄清楚如何调整上面的代码来实现它仍然是读者的练习。 : - )
答案 1 :(得分:1)
例如,您可以将输入存储在list
中,而不是仅将其打印出来。
之后从列表中获取正确的元组并将其分配给变量是微不足道的......
答案 2 :(得分:1)
将整个文件存储到列表中:
import csv
with open ("lol.txt",'rb') as f:
csv_r = csv.reader (f)
entries = [ (name, float(p1), float(p2)) for name, p1, p2 in csv_r]
for index, entry in enumerate(entries):
print ("%2i. %-10s %5.2f %5.2f" % (index, entry[0], entry[1], entry[2]))
choice = int(raw_input("Choose a number: "))
print (entries[choice])
输出:
0. herp 123.00 456.00
1. derp 321.00 654.00
2. hurr 213.00 546.00
Choose a number: 0
('herp', 123.0, 456.0)
>>>
答案 3 :(得分:0)
以open(“lol.txt”,“rt”,newline ='\ n \ n')作为f:
将其更改为'\ n'
打开(“lol.txt”,“rt”,换行符='\ n')为f: