错误地从文件中删除最后一个字符

问题描述 投票:1回答:2

在子流程中,我想从txt文件的每一行中删除最后4个字符。然而,线的长度是变化的。我看过很多页面,包括How to shave off last character using sed?,但似乎没有正确执行。我大约有100行,而前38行没有正确删除前4个字符。一个看似随机的数字被删除。在第一行之后,所有行之后都有我的预期输出。怎么样?现在我有:

subprocess.run(['sed', 's/.\{4\}$//', 'infile.txt'])

文件的末尾总是有四个无用的字符-/ pid

3726-weinberg/pid
11717-christopher/pid
11138-span/pid
.
.
.
2932-smith/pid
.
.
.

问题是输出是:

3726-w
11717-chri
111
.
.
.
2932-smith //line 39! all good now
.
.
.

但我希望:

3726-weinberg
11717-christopher
11138-span
.
.
.
2932-smith //line 39! all good now
.
.
.

Sed不一定是解决方案。如果截断或剪切或其他各种方法都起作用,请随时告诉我。我选择sed是因为我在程序的另一部分中使用了它。

python sed subprocess truncate
2个回答
2
投票

也许在python中这样做更容易。

with open('infile.txt', 'r') as f:
    lines = f.read()
out = [line[:-4] for line in lines.split('\n')]
with open('infile.txt', 'w') as f:
    f.write('\n'.join(out))

2
投票

是因为行的长度只有三个字符或更短?如果该行的长度至少为四个字符,则当前的子流程将仅删除最后四个字符。如果这是问题所在,则可以进行以下小的更改(这似乎对我测试过的输入有效):

subprocess.run(['sed', 's/.\{1,4\}$//', 'infile.txt'])
© www.soinside.com 2019 - 2024. All rights reserved.