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

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

我有一个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

enter image description here

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

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

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

它总是在最后添加一条新线但不在前面。

python
4个回答
1
投票

假设我们在字符串中包含文件的全部内容,我们可以使用简单的替换方法,如下面的代码所示。

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

200 12 22 23 333 312 33 249汽车

12


1
投票

正则表达式是你的朋友:

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

0
投票

这是一个适用于整个文本文件的解决方案。它会在一系列数字后面的每个单词后附加一个换行符。

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

-1
投票

什么时候

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

你可以使用str.replace(但它在下一行的开头留下空格):

print(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(person|car)\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'(?<=\d)(\s+[a-z]+)\b *', r'\1\n', s)

相同的输出。

编辑:Reedited,预设(res)添加,输出添加,打印添加。

© www.soinside.com 2019 - 2024. All rights reserved.