python使用附加的时间值更新历元值

2024-10-02 00:39:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Python处理这些数据,它的前四个字段用“|”分隔,第五个字段用空格分隔

VER:1|long=|lat=|device=D3052|eventid=31007311 status=Active time=1528496310749 priority=1 desitnationHost= group=cluster1
VER:1|long=|lat=|device=D3010|eventid=31007312 status=Active time=1528496310765 priority=1 desitnationHost= group=cluster1
VER:1|long=|lat=|device=D3094|eventid=31007313 status=Active time=1528496315380 priority=1 desitnationHost= group=cluster1
VER:1|long=|lat=|device=D3052|eventid=31007314 status=Active time=1528496317513 priority=1 desitnationHost= group=cluster1
VER:1|long=|lat=|device=D3010|eventid=31007315 status=Active time=1528496329604 priority=1 desitnationHost= group=cluster1 

时间字段包含历元时间值,需要将该值更新1年

该数据包含在目录中的多个文本文件中,需要逐行读取每个文本文件进行处理

我的Python方法-

#import required python library
import os
import re

#read a text file (later need to loop through multiple text files)
h = open('C:/directory/new_1.txt', 'r')
  
# Reading from the file 
content = h.readlines()
  
# Iterating through the content 
# Of the file 
for line in content:
    milli_second_in_year = 31536000000
    l = re.sub(r'time=(\d+)',r'\1d','milli_second_in_year')
    print(l)

在我的上述方法中,我无法将提取的时间值与“年内毫秒”相加。

我尝试了以下更改,但无法获得预期的输出-

for line in content:
    m = re.search(r'time=(\d+)',line)    
    match = m.group(1)
    match = int(match)+31536000000
    print(match)

正在获取所需的时间值,无法再次写回文件

预期输出(更新的时间值)——

VER:1|long=|lat=|device=D3052|eventid=31007311 status=Active time=1560032310749 priority=1 desitnationHost= group=cluster1
VER:1|long=|lat=|device=D3010|eventid=31007312 status=Active time=1560032310765 priority=1 desitnationHost= group=cluster1
VER:1|long=|lat=|device=D3094|eventid=31007313 status=Active time=1560032315380 priority=1 desitnationHost= group=cluster1
VER:1|long=|lat=|device=D3052|eventid=31007314 status=Active time=1560032317513 priority=1 desitnationHost= group=cluster1
VER:1|long=|lat=|device=D3010|eventid=31007315 status=Active time=1560032329604 priority=1 desitnationHost= group=cluster1

Tags: timedevicestatus时间grouplongactivelat
1条回答
网友
1楼 · 发布于 2024-10-02 00:39:28

如果我正确理解了您想要做的事情,您可以这样做:

milli_second_in_year = 31536000000
with open('C:/directory/new_1.txt', 'r') as f:
    with open('C:/directory/new_1_adapted.txt', 'w+') as fnew:
        for line in f:
            m = re.search(r'time=(\d+)', line)
            time_value = m.group(1)
            new_time_value = str(int(time_value) + milli_second_in_year)
            newline = line.replace(time_value, new_time_value)
            fnew.write(newline)

有几件事需要注意:

  • 使用上下文管理器打开文件(with open...)可确保文件始终正确关闭
  • 无需使用readlines-您只需使用文件句柄在行上迭代即可
  • 我不确定是否要覆盖同一个文件:在这种情况下,您必须先写入另一个文件,然后删除第一个文件并重命名第二个文件,或者收集数组中的行并在文件关闭后将其写回(我在下面添加了一个版本)
  • 您对re.sub的使用不正确-如果您想使用它,请查阅文档(我没有在这里)
  • 我没有添加任何错误处理-如果您的文件格式错误,这可能只是崩溃
  • 最后:我还没有测试过这个,所以它可能有bug

以下是将覆盖同一文件的版本:

milli_second_in_year = 31536000000
file_path = 'C:/directory/new_1.txt'
new_lines = []
with open(file_path, 'r') as f:
    for line in f:
        m = re.search(r'time=(\d+)', line)
        time_value = m.group(1)
        new_time_value = str(int(time_value) + milli_second_in_year)
        new_line = line.replace(time_value, new_time_value)
        new_lines.append(new_line)

with open(file_path, 'w') as f:
    f.writelines(new_lines)

相关问题 更多 >

    热门问题