首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果第一个值与输入的数据匹配,如何在file.txt中找到列表的最后值

如果第一个值与输入的数据匹配,如何在file.txt中找到列表的最后值
EN

Stack Overflow用户
提问于 2022-11-05 05:02:45
回答 2查看 33关注 0票数 1

我正在写一个简单的汽车租赁系统来检查一辆汽车的价格。

这是Available Vehicles.txt,第三排是汽车价格。

代码语言:javascript
复制
RegNumber | Car Name | Price | Transmission Type
代码语言:javascript
复制
H4E-11,Toyota,66,Automatic Transmission
X11-11,Volkswagen,62,Automatic Transmission
JBA-123,Ibiza,65,Automatic Transmission
MDZ-A1A,Kodiaq,71,Automatic Transmission

我想遍历第一行,如果注册号与输入的注册号码相匹配,它将遍历行并检查第三列中的价格。

我有一个函数,要求用户输入他/她的汽车注册号,然后检查文件的第一行是否可用注册号。

代码语言:javascript
复制
def returnCar():
    # Ask registration number of car to rent
        regNumber = str(input("Please enter Registration Number of Car: "))

 # Check if Car is  in the system

        regNumbers = []  # List of registration number [H4E-11, X11-11, JBA-123, MDZ-A1A]

        with open("../AvailableVehicles.txt", "r", encoding="utf-8") as f:
                for data in f:
                        regRow = str(data.split(",")[0])
                        regNumbers += [regRow]   # append registration number to the list
        if regNumber in regNumbers:
                # get price from equivalent row

我想打印这样的东西:

代码语言:javascript
复制
Please enter Registration Number of Car: H4E-11
The price is: 66 dollars
EN

回答 2

Stack Overflow用户

发布于 2022-11-05 05:18:02

不要手动解析csv文件,请使用csv模块:

代码语言:javascript
复制
import csv

regNumber = input("Please enter Registration Number of Car: ")

with open('AvailableVehicles.txt') as f:
    # load file lazily
    data = csv.reader(f)

    # let's use a generator to stop on the first match
    price = next((row[2] for row in data if row[0] == regNumber), None)
    if price:
        print(f'The price is: {price}')
    else:
        print(f'Registration number not found')

另一种使用pandas的方法是,一旦计算出价格,就可以反复映射任何注册号,而无需再次解析文件:

代码语言:javascript
复制
import pandas as pd

df = pd.read_csv('AvailableVehicles.txt', names=['RegNumber', 'Car Name', 'Price', 'Transmission Type'])
prices = df.set_index('RegNumber')['Price']

# this could be in a loop
regNumber = input("Please enter Registration Number of Car: ")

if regNumber in prices.index:
    print(f'The price is: {prices.get(regNumber)}')
else:
    print('Registration number not found')

输出:

代码语言:javascript
复制
Please enter Registration Number of Car: H4E-11
The price is: 66
票数 2
EN

Stack Overflow用户

发布于 2022-11-05 05:09:13

您可以使用index方法找出与注册号匹配的行,然后必须重新打开文件并循环到该行并获得价格。

当您第一次遍历文件时,通过比较注册号来获得价格要容易得多。然后,如果你找到一个匹配的,你可以直接打印价格和打破循环,避免重复剩余的行不必要。

例如:

代码语言:javascript
复制
def returnCar():
    regNumber = str(input("Please enter Registration Number of Car: "))
    with open("../AvailableVehicles.txt", "r", encoding="utf-8") as f:
        for data in f:
            line = data.split(',')
            if line[0] == regNumber:
                price = line[2]
                print(f'The price is: ${price} dollars')
                break
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74325246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档