如何逐行从文件中提取所需数据?

2024-04-29 03:36:23 发布

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

我有一个文件abc.txt,其中包含如下所示的示例数据

Server.log_19September2020_14_31_11:09192020,143110457017,info,#PERFORMANCE:End:<1600506070>:<399767>:<1600506070>:<457014>
Server.log_19September2020_14_31_11:09192020,143110530373,info,#PERFORMANCE:End:<1600506070>:<457135>:<1600506070>:<530369>
Server.log_19September2020_14_31_11:09192020,143110603215,info,#PERFORMANCE:End:<1600506070>:<530506>:<1600506070>:<603211>

这里我想提取最后4个数据,即<;d1>;:&书信电报;d2>;:&书信电报;d3>;:&书信电报;d4>;并将其存储在4个不同的变量中。 在读取文件时,如何从文件中提取这4个必需的数据


Tags: 文件数据ltgtinfotxtlog示例
3条回答

您可以使用regex

import re
from operator import itemgetter

filename = open("abc.txt", 'r')
read_file = filename.readlines()
for each_line in read_file:
    a, b, c, d = itemgetter(0,1,2,3)(re.findall("<[0-9]*>", each_line))
    print a, b, c, d

输出

<1600506070> <399767> <1600506070> <457014>
<1600506070> <457135> <1600506070> <530369>
<1600506070> <530506> <1600506070> <603211>

请参阅csv标准模块示例(更改的分隔符):

with open('eggs.csv', newline='') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=':')
    for row in spamreader:
        print([n[1:-1] for n in row[-4:]])

您可以使用replace()rsplit()。 数据采用这种格式< d1 >:< d2 >:< d3 >:< d4 >每个变量都在这个符号<>内,并由:so分隔。我首先用空字符串('')替换<>。替换后的数据应该是这样的d1:d2:d3:d4现在您可以简单地使用rsplit(':', 4)来提取这些数据

with open('data.txt') as fp:
    for line in fp:
        _, d1, d2, d3, d4 = line.strip().replace('<', '').replace('>', '').rsplit(':', 4)
        print(d1, d2, d3, d4)

输出:

1600506070 399767 1600506070 457014
1600506070 457135 1600506070 530369
1600506070 530506 1600506070 603211

相关问题 更多 >