我是python和regex的初学者。我有一个清单:[cat,dog,bird,duck]
如果猫在列表中它应该将'动物'添加到现有的宠物()在paranthesis内:宠物(动物)
如果猫和狗在列表中,它应该是:宠物(动物,动物)
文字档案:
My favourite pets
pets()
预期文本文件:
My favourite pets
pets(animal,animal)
编码
import re
list=['cat','dog','bird','cow']
with open('te.txt','r+') as f:
a = [x.rstrip() for x in f]
if 'cat' in list:
item='animal'
add=(r'^pets (.*)', item)
f.write('pets(' + item)
if 'dog' in list:
item='animal'
add=(r'^pets (.*)', item)
f.write('pets(' + item)
我坚持这样做,请帮我修改我的代码。将不胜感激!
答案 0 :(得分:0)
我不知道你为什么要使用正则表达式。您只需阅读文本文件,使用字符串切片删除My favourite pets
和pets()
文本,构建列表并将其写回文件。要求正则表达式并不复杂。
这是我想出的一个快速替代方案:
MY_NEW_LIST = ['cat', 'dog', 'bird', 'cow']
ANIMAL_PETS = ['cat', 'dog']
PETS_FILE = 'animals.txt'
# open the existing file, and get the line with `pets(…)`
with open(PETS_FILE, 'r+') as f:
existing_animal_str = f.readlines()[1]
# get the list of animals from `pets(…)`
existing_animals = pets_line[5:-1]
list_of_animals = [i for i in existing_animals.split(',') if len(i) > 0]
# add the new animals to the list
for pet in ANIMAL_PETS:
if pet in MY_NEW_LIST:
list_of_animals.append('animal')
# construct a new string to put back into `pets(…)`
final_animal_str = ', '.join(list_of_animals)
# write the new string back to the file
with open(PETS_FILE, 'w+') as f:
f.write('My favourite pets\npets(%s)' % final_animal_str)
前三行包含一些常量:动物列表,我们向animal
行添加pets()
的宠物列表,以及文本文件的名称。
作为旁注,您的变量名称可以用于某些工作。由于list
是内置函数的名称,add
非常通用,因此使用这样的变量名称会导致问题。使用更具体的变量名称。
答案 1 :(得分:0)
听起来像您在文件中找到文字并替换它,您可以使用str.replace
并重写它;
文字档案
My favourite pets
pets()
listAnimal = ['cat', 'dog', 'bird', 'cow']
with open('te.txt','r+b') as f:
listsAppendAnimal = []
text = 'pets('
if 'cat' in listAnimal:
listsAppendAnimal.append('animal')
if 'dog' in listAnimal:
listsAppendAnimal.append('animal')
allText = f.read()
allText = allText.replace('pets()', 'pets(' + ', '.join(listsAppendAnimal) + ')') # or use re python
f.seek(0)
f.truncate()
f.write(allText)
f.close()
输出文字文件:
My favourite pets
pets(animal,animal)
使用正则表达式;
import re
listAnimal = ['cat', 'dog', 'bird', 'cow']
with open('te.txt','r+b') as f:
listsAppendAnimal = []
text = 'pets('
if 'cat' in listAnimal:
listsAppendAnimal.append('animal')
if 'dog' in listAnimal:
listsAppendAnimal.append('animal')
allText = f.read()
allText = re.sub(r'pets\(.*?\)', 'pets(' + ', '.join(listsAppendAnimal) + ')', allText)
f.seek(0)
f.truncate()
f.write(allText)
f.close()
-
此致