【发布时间】:2020-03-02 09:44:23
【问题描述】:
我正在尝试编写一个 python 脚本来获取一个文件(我们称之为input.txt),并寻找以文本“移动到第一个周边点”结尾的行。然后它需要将这一行替换为它后面的行,并将它后面的行替换为第一行。文件的其余部分必须保持不变。在文件中需要发生这种情况的情况很多。
我的思考过程是这样的。寻找以“移动到第一个周边点”结尾的线。一旦代码找到它,它将将该行保存为变量,然后从文件中删除该行。然后,如果下一行以“restore layer Z”结尾(下一行总是如此),则需要在此行之后添加先前删除的行。
这是我想要做的:
- 打开一个文件 (
'input.txt')。 - 交换每个出现的两个连续行,其中,
- 第一行结束于:
'move to first perimeter point' - 第二行结束于:
'restore layer Z' - 注意:众所周知,所有此类事件总是成对发生(第一到第二行连续放置)。
- 第一行结束于:
- 将此更改写入新文件 (
'output.txt')。
我曾尝试使用 python 将其组合在一起。几年前玩过python,依稀记得怎么用。它抛出了错误。这是我在 cmets 部分建议更正后的代码:(a) str.endwith --> str.endswith, (b) For --> for。任何建议都会非常有帮助和感激。
inp = open('input.txt','r')
out = open('output.txt', 'w')
prev = inp.readline()
for line in inp:
if line.endswith('move to first perimeter point')
prev = line
if line.endswith('restore layer Z')
out.write(line)
out.write(prev)
else:
out.write(prev)
prev = line
out.write(prev)
out.close()
inp.close
我希望输入文件保持不变,同时创建了一个新的输出文件。相反,什么也没发生。
提前感谢您的帮助!我对此很陌生。
【问题讨论】:
-
我本来希望看到一条错误消息。也许你根本没有运行它?
-
我强烈建议您使用 readlines/writelines 函数,它可以让您将文件的行作为数组来处理。 python-reference.readthedocs.io/en/latest/docs/file/…
-
除了明显的错误(即
For而不是for、endwith而不是endswith等),当你使用for line in fp时,这些行有一个尾随换行符。所以line.endswith('hello')永远不会是真的;请改用line.endswith('hello\n')。 -
我对问题进行了建议的更改,试图使其更加客观。一旦,它被接受,请看看它。 @EliteAnorak 请尽量使您的问题结构合理。此外,使用 cmets 部分的建议更新问题是一种很好的做法。这有助于人们理解您的要求,并且人们可能会发现它在未来很有用,并且也会对您的问题进行投票:这反过来会增加您的 stackoverflow 声誉点。此外,结构良好、可重复性极少的问题会很快吸引多个答案。最好的。
标签: python pandas text-files swap text-processing