首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >所以我有一个我正在使用的文本文件,我想将其中的信息用于我的停车系统。

所以我有一个我正在使用的文本文件,我想将其中的信息用于我的停车系统。
EN

Stack Overflow用户
提问于 2021-01-06 16:32:05
回答 2查看 121关注 0票数 2

我文本文件中的一行:

代码语言:javascript
运行
复制
RCF585 medium Joseph -you entered the parking lot at 3:30 and left at 4:30- 

我想要做的是根据车牌号码识别汽车,然后知道它是“中等”(大小),因此它的总成本是(停车费* 1.25 (税)),同时小is (停车费用* 1.00)和大(停车费用* 1.50)的总成本。

停车费(每半小时20美元)当然取决于汽车停放的时间,所以我的第二个问题是如何通过读取相关汽车的线来读取和识别一辆汽车的停放量。到目前为止,我已经成功地写了以下几篇文章:

代码语言:javascript
运行
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-06 17:22:36

我会用Regex来查找文本中的时间,

代码语言:javascript
运行
复制
import re

regex = re.compile(r'(\d{1,2}:\d\d)')
times = regex.findall(line)

使用dateutil.relativedeltadatetime找到停车时间,

代码语言:javascript
运行
复制
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)

因此,所有这些都将是:

代码语言:javascript
运行
复制
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,因为您不必再担心手动关闭该文件了。

票数 1
EN

Stack Overflow用户

发布于 2021-01-06 16:47:50

您可以使用re.findall()提取时间,使用datetime.datetime.strptime()将提取的字符串转换为日期时间数据:

代码语言:javascript
运行
复制
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))

测试运行:

代码语言:javascript
运行
复制
Please write your license number: RCF585

输出:

代码语言:javascript
运行
复制
1:00:00

解释:

模式\d+:\d+仅表示冒号两侧的数字,而格式%H:%M表示冒号对面的一个小时值和一个分钟值。

注意:使用open操作符将open调用赋值给变量是一种错误的做法。相反,使用with语句。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65599624

复制
相关文章

相似问题

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