首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python将日志文件中不同行中的三个字符串连接为一行。

Python将日志文件中不同行中的三个字符串连接为一行。
EN

Stack Overflow用户
提问于 2020-07-11 15:57:48
回答 3查看 65关注 0票数 0

我需要将三个不同的字符串从不同的行连接到一行。我的日志文件如下所示:

代码语言:javascript
复制
2020-07-03 15:21:58,962 ERROR [AIF]: Line: 6, Error: No such member
2020-07-03 15:21:58,962 ERROR [AIF]: Actual;2020;Jun;YTD;EWHG;<Entity Currency>;A1399;401700;[None];[None];[None];[None];-7537030.790000000000
2020-07-03 15:21:58,962 ERROR [AIF]: >>>>>>401700
2020-07-03 15:21:58,962 ERROR [AIF]: 
2020-07-03 15:21:58,962 ERROR [AIF]: Line: 7, Error: The member of the Account dimension is not base level.
2020-07-03 15:21:58,962 ERROR [AIF]: Actual;2020;Jun;YTD;EWRA;<Entity Currency>;A1399;[ICP None];[None];[None];[None];[None];44984167.990000000000
2020-07-03 15:21:58,962 ERROR [AIF]: >>>>>>A1399
2020-07-03 15:21:58,962 ERROR [AIF]: 
2020-07-03 15:21:58,962 ERROR [AIF]: Line: 15, Error: The member of the Account dimension is not base level.
2020-07-03 15:21:58,962 ERROR [AIF]: Actual;2020;Jun;YTD;EWHG;<Entity Currency>;A2090;[ICP None];[None];[None];[None];[None];0.270000000000
2020-07-03 15:21:58,962 ERROR [AIF]: >>>>>>A2090

错误:

代码语言:javascript
复制
Line: 6, Error: No such member | >>>>>>401700 | Actual;2020;Jun;YTD;EWHG;<Entity Currency>;A1399;401700;[None];[None];[None];[None];-7537030.790000000000

下面是我的代码,它是用不同的行编写的:

代码语言:javascript
复制
def main():
    fo = open("C:\\Users\\yannis\\py_script\\FMC_1198.log", "r", encoding="ISO-8859-1")
    ofile = open("C:\\Users\\yannis\\py_script\\out_log.txt",'a', newline='')

    vinter = ""
    vline = ""
    vmember = ""

    f1 = fo.readlines()
    for x in f1:

        res = x.partition('Line:')[2]
        if len(res) > 0:
            vline = res
            continue
        res = x.partition('>>>>>>')[2]
        if len(res) > 0:
            vmember = res
            continue
        res = x.partition('Actual;')[2]
        if len(res) > 0:
            vinter = res
            continue

        linha = vinter + vline + vmember
        if len(linha) > 0:
            print(linha)
            ofile.write(linha)
            continue


    fo.close()
    ofile.close()

任何帮助都非常感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-07-11 16:01:51

这是因为字符串的末尾有\n,所以您应该编写一个助手函数。

代码语言:javascript
复制
def trimNewlines(st):
  return st.replace("\n")

代码语言:javascript
复制
def trimNewlines(st):
  return st.rstrip("\n")

如果您只想删除字符串右侧的换行符,而不是从中间或左侧移除换行符

票数 0
EN

Stack Overflow用户

发布于 2020-07-11 16:22:56

我在想以下几点:

代码语言:javascript
复制
new_log = str()

with open("old_log.txt", 'r') as input_file:
    lines = [line[37:-1] for line in input_file.readlines()]
    lines = [l for (i,l) in enumerate(lines) if i%4!=3]

    remastered = list()
    i = 0
    while i + 2 < len(lines):
        remastered.append(f"{lines[i]} | {lines[i+2]} | {lines[i+1]}")
        i += 3

    new_log = '\n'.join(remastered)

with open("new_log.txt", 'a') as input_file:
    input_file.write(new_log+'\n')
票数 0
EN

Stack Overflow用户

发布于 2020-07-11 16:33:08

试试这个,使用zip + list splicing

代码语言:javascript
复制
# pre-processing, to remove un-wanted lines & starting character's
lines = []

for l in fo.readlines():
    _, y = l.split("[AIF]:")
    if y.strip():
        lines.append(y)

with open("test.txt", 'w') as f:
    # list splicing with zip, job done..
    lines = [f"{a} | {b} | {c}\n"
             for a, b, c in zip(lines[0::3], lines[2::3], lines[1::3])]
    
    f.writelines(lines)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62851436

复制
相关文章

相似问题

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