我正在编写一个简单的租车系统来检查汽车的价格。
这是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