如何在遇到python中指定的单词时在txt中添加\n

如何在遇到python中指定的单词时在txt中添加\n,python,Python,我有一个txt文件(a.txt),其中包含以下信息: 259 96 339 96 339 249 259 249 person 200 12 22 23 333 312 33 249 car 我想使用python将此A.txt修改为类似的内容: 259 96 339 96 339 249 259 249 person 200 12 22 23 333 312 33 249 car 这意味着我必须在“person”或“car”之后添加('\n') 我很难找到单词的位置,而seek(n)

我有一个txt文件(a.txt),其中包含以下信息:

 259 96 339 96 339 249 259 249 person 200 12 22 23 333 312 33 249 car
我想使用python将此A.txt修改为类似的内容:

 259 96 339 96 339 249 259 249 person
 200 12 22 23 333 312 33 249 car

这意味着我必须在“person”或“car”之后添加('\n')

我很难找到单词的位置,而seek(n)只能找到字符的位置。 当我运行以下代码时

 f.seek(0)
 f.write('\n')

它总是在末尾添加新行,而不是在前面添加新行。

正则表达式是您的朋友:

import re
string = "259 96 339 96 339 249 259 249 person 200 12 22 23 333 312 33 249 car"

rx = re.compile(r'\b(person|car)\s*')
string = rx.sub(r'\1\n', string)
print(string)
这就产生了

259 96 339 96 339 249 259 249 person
200 12 22 23 333 312 33 249 car

假设文件的全部内容都是字符串,我们可以使用SimpleReplace方法,如下面的代码所示

a = "259 96 339 96 339 249 259 249 person 200 12 22 23 333 312 33 249 car 12"
a = a.replace("person ", "person\n").replace("car ","car\n")
print(a)
上述代码将显示:

259 96 339 96 339 249 259 249 place

200 12 22 333 312 33 249车

十二,

什么时候

重新导入
s='259 96 339 96 339 249 259 249人200 12 22 23 333 312 33 249车'
您可以使用str.替换(但它在下一行的开头留有空格):

打印(s.replace('person','person\n')。replace('car','car\n'))
输出(下一行开头的空格处的点)。如果添加空间信息替换模式,则不会替换最后出现的“人”或“车”

259 96 339 96 339 249 259 249 person
 200 12 22 23 333 312 33 249 car
或者可以使用正则表达式:

s=re.sub(r'\b(人车)\b',r'\1\n',s)
输出

259 96 339 96 339 249 259 249 person
200 12 22 23 333 312 33 249 car

或者更一般地说,您可以在数字和空格后替换所有单词:


s=re.sub(r'(?这里有一个解决方案,它可以处理整个文本文件。它将在一系列数字后面的每个单词后面附加一个换行符

import re

txt = r'259 96 339 96 339 249 259 249 person 200 12 22 23 333 312 33 249 car'
patt = r'\b[\d\s]+\w+\b'

found = re.findall(patt, txt)
outtxt = ''.join(['%s\n' % f.strip() for f in found])

>>>outtxt
259 96 339 96 339 249 259 249 person
200 12 22 23 333 312 33 249 car

正则表达式可能是
\b(\w+)\b
@AdamSmith:我先有了它,但你需要先去掉空格。真的。
\b(\w+)\b\s*
然后。@AdamSmith:这使得最后一个单词边界无效(
\w+\s*
自动暗示单词边界)。这是真的吗?我认为
\w+\s*
只有在匹配非零个空格时才意味着单词边界。最后一个单词和EOF之间是否有单词边界?我实际上不知道。这似乎是最简单的解决方案!