仅向文件写入行的某些列(用空格分隔)

2024-05-18 09:09:27 发布

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

我正在一行一行地读日志。我试图只打印行的某些列。对于bash脚本,我将使用awk和$来分隔它。但是,我不知道如何用Python实现它。我试过使用split,但它不能完全满足我的需要。你知道吗

我现在的代码:

for line in file:
    if STORED_PROCS_BEGIN in line:
        log.write(line)
    elif STORED_PROCS_FINISHED in line:
        log.write(line)
    elif STORED_TASK_BEGIN in line:
        log.write(line)
    elif STORED_TASK_FINISHED in line:
        log.write(line)
    elif ACTUATE_REPORT_SCHEDULE in line:
        break

所以当我试图格式化要传递到write()的行时。你知道吗

我想要的例子:

date time info junk1 junk2 name=>;日期时间信息名称

编辑:我有一个想法,我可以分割和提取我想要的字段,并将它们连接在一起。。但必须有更好的办法。你知道吗


Tags: 代码in脚本bashlogtasklinewrite
3条回答

试试这个:

' '.join(filter(lambda x: x not in ['junk1', 'junk2'] , line.split()))

我假设列之间用制表符隔开。 如果您确实不想这样做:

columns = line.split("\t")
line = "\t".join(columns[:3] + columns[5:])

或者更紧凑更丑陋:

line = "\t".join(line.split("\t")[:3] + line.split("\t")[5:])

…您可以使用regex替换:

line = re.sub(r'(\S+\t\S+\t\S+)\t\S+\t\S+\t(\S+)', r'\1\t\2', line)

\t=制表符

\S+=一个或多个非空白字母

()=组

这将前四列分组为reference\1,最后一列分组为reference\2,并用由制表符分隔的组1和组2替换匹配表达式。你知道吗

在交互式python中运行:

$ re.sub(r'(\S+\t\S+\t\S+)\t\S+\t\S+\t(\S+)', r'\1\t\2',line)
'date\ttime\tinfo\tname'

您可以使用split()将一行拆分为单词,没错。然后,可以对输出中要包含的列进行索引:

line = 'date time info junk1 junk2 name'
parts = line.split()
parts_I_want = parts[0:3] + parts[5:6]
print ' '.join(parts_I_want)

如果只想删除某些列,还可以使用del

line = 'date time info junk1 junk2 name'
parts = line.split()
del parts[4]  # junk2
del parts[3]  # junk1
print ' '.join(parts)

相关问题 更多 >