我有一个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')
它总是在最后添加一条新线但不在前面。
假设我们在字符串中包含文件的全部内容,我们可以使用简单的替换方法,如下面的代码所示。
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
正则表达式是你的朋友:
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
这是一个适用于整个文本文件的解决方案。它会在一系列数字后面的每个单词后附加一个换行符。
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
什么时候
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,预设(re
和s
)添加,输出添加,打印添加。