Python在csv文件中找不到某些东西

2024-06-01 07:15:04 发布

您现在位置:Python中文网/ 问答频道 /正文

import pyfiglet
import csv

ascii_banner = pyfiglet.figlet_format("Menu   Program .")
print(ascii_banner)

start = str(input("1. Process an order.  2. View previous orders. 3. Edit Menu \nOption: "))

if start == "1":
    print("Welcome")
    with open('menu.csv') as f:
        reader = csv.reader(f)
        for row in reader:
            print(row)
    fid = str(input("What is the food ID?"))
    if fid == row[1]:
        print(row[2])
    if fid != row[1]:
        print("That is not an id.")

我的csv文件:

foodname,fid,price
All day large,1,Five Pounds Fifty
All day small,2,Three Pounds Fifty
Hot Dog,3,Three Pounds
Burger,4,Four Pounds
Cheese Burger,5,Four Pound Twenty Five
Chicken goujons,6,Three Pounds Fifty
Fries,7,One Pound Seventy Five
Salad,8,Two Pound Twenty
Milkshake,9,Two Pound Twenty
Soft Drinks,10,One Pound Thirty
Still water,11,90 Pence
Sparkling water,12,90 Pence

当我运行它的时候,如果输入是12,但是任何其他的数字“不是一个id”我觉得很奇怪,程序就会工作。 有人知道这是为什么吗?我怎样才能解决它


Tags: csvimportifasciireaderrowthreeprint
1条回答
网友
1楼 · 发布于 2024-06-01 07:15:04

让我们将print(row)放在while循环之后fid变量之前。它打印什么?它打印出:

['Sparkling water', '12', '90 Pence']

这是因为在while循环中,您只逐个打印了row的内容,但没有保存它们,所以只使用了最后一个

那你猜对了。这就是为什么它只有在输入12时才起作用

解决这个问题的最简单方法是将reader转换为list,并将其放入row变量中。您可以这样轻松地完成:

with open('menu.csv') as f:
        reader = csv.reader(f, delimiter=',')
        row = list(reader)

现在,如果您print(row),您将得到一个2D list

[['foodname', 'fid', 'price'], ['All day large', '1', 'Five Pounds Fifty'], ['All day small', '2', 'Three Pounds Fifty'], ['Hot Dog', '3', 'Three Pounds'], ['Burger', '4', 'Four Pounds'], ... ]]

这意味着您的fid现在在row[1-12][1]上,每menu项和row[1-12][2]等的价格(1-12因为0是您的列名foodname、fid和price)

要首先从输入中打印价格,请从输入中获取fid

fid = str(input("What is the food ID?"))

正如您编写的那样,返回一个str并且我们想要int,所以让我们这样做:

fid = int(input("What is the food ID?"))

现在谈谈主要逻辑:

if fid > 0 and fid < len(row):
    print (row[fid][2])

首先,我们检查fid > 0,因为您的列名在这里,然后检查fid是否在范围内,以避免index out of range{}。如果条件满足,则我们在fid位置打印row,并在您的csv中打印其位于2位置的价格

所以在最后你的代码应该是这样的

import pyfiglet
import csv

ascii_banner = pyfiglet.figlet_format("Menu   Program .")
print(ascii_banner)

start = str(input("1. Process an order.  2. View previous orders. 3. Edit Menu \nOption: "))

if start == "1":
    print("Welcome")
    with open('menu.csv') as f:
        reader = csv.reader(f, delimiter=',')
        row = list(reader)
    
    print(row)
    fid = int(input("What is the food ID?"))

    if fid > 0 and fid < len(row):
        print (row[fid][2])
    else:
        print ("That is not an id.")

为了很好地打印项目,我将添加print('\n'.join(map(' | '.join, row)))而不是print(row),但我将把它留给您

请看一下CSV File Reading and Writing in Python,以后先用Python docs解决你的问题,如果你真的不能解决你的问题,把它贴在这里

相关问题 更多 >