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



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

这是Available Vehicles.txt,其中第三行是汽车价格。

RegNumber | Car Name | Price | Transmission Type
H4E-11,Toyota,66,Automatic Transmission
X11-11,Volkswagen,62,Automatic Transmission
JBA-123,Ibiza,65,Automatic Transmission
MDZ-A1A,Kodiaq,71,Automatic Transmission

我想循环浏览第一行,如果注册号与输入的注册号匹配,它会遍历该行并检查第三列中的价格

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

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

我想打印这样的东西:

Please enter Registration Number of Car: H4E-11
The price is: 66 dollars

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

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的替代方案,一个优点是计算一次价格,以便能够重复映射任何注册号,而无需再次解析文件:

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')

输出:

Please enter Registration Number of Car: H4E-11
The price is: 66

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

当你第一次循环浏览文件时,通过比较注册号可以更容易地获得价格。然后,如果你找到了匹配项,你可以立即打印价格并跳出循环,避免重复不必要的剩余行

例如:

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

最新更新