我文本文件中的一行:
RCF585 medium Joseph -you entered the parking lot at 3:30 and left at 4:30-
我想要做的是根据车牌号码识别汽车,然后知道它是“中等”(大小),因此它的总成本是(停车费* 1.25 (税)),同时小is (停车费用* 1.00)和大(停车费用* 1.50)的总成本。
停车费(每半小时20美元)当然取决于汽车停放的时间,所以我的第二个问题是如何通过读取相关汽车的线来读取和识别一辆汽车的停放量。到目前为止,我已经成功地写了以下几篇文章:
f=open(file, "r")
which_car= input("Please write your license number: ")
for line in f:
if line.startswith(which_car): #identifying which car we want to deal with
发布于 2021-01-06 17:22:36
我会用Regex来查找文本中的时间,
import re
regex = re.compile(r'(\d{1,2}:\d\d)')
times = regex.findall(line)
使用dateutil.relativedelta和datetime找到停车时间,
from datetime import datetime
from dateutil.relativedelta import relativedelta
parking_time = relativedelta(datetime.strptime(times[0] , '%H:%M'), datetime.strptime(times[1] , '%H:%M'))
minutes = abs((parking_time.hours * 60) + parking_time.minutes)
因此,所有这些都将是:
import re
from datetime import datetime
from dateutil.relativedelta import relativedelta
which_car = input("Please write your license number: ")
with open(file, 'r') as f:
for line in f:
if line.startswith(which_car):
size = line.split(' ')[1]
regex = re.compile(r'(\d{1,2}:\d\d)')
times = regex.findall(line)
# Update - Ex. 3:27 -> 3:30, 3:35 -> 3:30
for i in range(len(times)):
minute = int(times[i].split(':')[1])
if minute - ((minute // 15) * 15) < 7.5:
minute = (minute // 15) * 15
else:
minute = (minute // 15 + 1) * 15
times[i] = times[i].split(':')[0] + ':' + str(minute)
parking_time = relativedelta(datetime.strptime(times[0] , '%H:%M'), datetime.strptime(times[1] , '%H:%M'))
minutes = abs((parking_time.hours * 60) + parking_time.minutes)
parking_cost = (minutes // 30) * 20
total_cost = parking_cost # Default size is small
if size == 'big':
total_cost = parking_cost * 1.5
elif size == 'medium':
total_cost = parking_cost * 1.25
我建议在处理文件时使用with,因为您不必再担心手动关闭该文件了。
发布于 2021-01-06 16:47:50
您可以使用re.findall()
提取时间,使用datetime.datetime.strptime()
将提取的字符串转换为日期时间数据:
import re
from datetime import datetime
which_car = input("Please write your license number: ")
file = "text.txt"
with open(file, "r") as f:
for line in f:
if line.startswith(which_car):
time1, time2 = re.findall("\d+:\d+", line)
def string_to_time(string):
return datetime.strptime(string , '%H:%M')
print(string_to_time(time2) - string_to_time(time1))
测试运行:
Please write your license number: RCF585
输出:
1:00:00
解释:
模式\d+:\d+
仅表示冒号两侧的数字,而格式%H:%M
表示冒号对面的一个小时值和一个分钟值。
注意:使用open
操作符将open
调用赋值给变量是一种错误的做法。相反,使用with
语句。
https://stackoverflow.com/questions/65599624
复制相似问题