首页 > 解决方案 > Python:仅针对文件中的最后一行去除双引号和多个额外的分隔符

问题描述

要求:仅删除 S3 文件中最后一行的双引号和额外分隔符

S3 中的文件:

"MT"|"Montana"|"2018-01-16"|"N"
"NV"|"Nevada"|"2018-01-16"|"N"
"CA"|"California"|"2018-01-16"|"N"
"NJ"|"New Jersey"|"2018-01-16"|"N"
"TR"|"4"||||

S3 中的预期输出文件

"MT"|"Montana"|"2018-01-16"|"N"
"NV"|"Nevada"|"2018-01-16"|"N"
"CA"|"California"|"2018-01-16"|"N"
"NJ"|"New Jersey"|"2018-01-16"|"N"
TR|4

这里的事情是一些文件可以有更多的列,因此更像"TR"|"4"|||||. 我需要输出为TR|4

我在本地尝试过以下...

同样在它下方,仅删除"但不是所有尾随|

在此处输入图像描述

    file = "/Downloads/file.txt"
    lines = open(file, 'r').readlines()
    new_last_line = (lines[-1].strip('|'))
    new_last_line = new_last_line.replace('"', '')
    lines[-1] = new_last_line
    open(file, 'w').writelines(lines)

编辑:解决方案:我已经实现如下

    file = "/Downloads/file.txt"
    lines = open(file, 'r').readlines()
    lines[-1] = lines[-1].rstrip()
    fields = [field.replace('"', '') for field in lines[-1].split('|') if field]
    lines[-1] = '|'.join(fields)
    open(file, 'w').writelines(lines)

标签: pythonpython-3.xamazon-s3boto3

解决方案


这是一些丑陋的代码,可以满足您的需求。它将您的第一个示例作为输入并提供您想要的输出。

last_line = str.split('\n')[-1].replace('|', '').split('"')
str = str.split('\n')
del str[-1]
last_line[1] = last_line[1] + '|'
str.append(''.join(last_line))
str = '\n'.join(str)

此外,str变量包含您要更改的输入。


推荐阅读