我正在写一个简单的汽车租赁系统来检查一辆汽车的价格。
这是Available Vehicles.txt,第三排是汽车价格。
RegNumber | Car Name | Price | Transmission TypeH4E-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发布于 2022-11-05 05:18:02
不要手动解析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发布于 2022-11-05 05:09:13
您可以使用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')
breakhttps://stackoverflow.com/questions/74325246
复制相似问题