Python Django-未按预期替换我的字符串
我需要帮助,我不知道如何解决它 我在处理文件。基本上,我打开一个文件,阅读里面的内容,查找一个单词,然后替换旁边的单词 我正在打开一个文本文件,在本例中,我有两个同名的单词,它们分别为Python Django-未按预期替换我的字符串,python,django,Python,Django,我需要帮助,我不知道如何解决它 我在处理文件。基本上,我打开一个文件,阅读里面的内容,查找一个单词,然后替换旁边的单词 我正在打开一个文本文件,在本例中,我有两个同名的单词,它们分别为第1部分和第2部分 这是我的车。txt PART 1 car toyota PART 2 car toyota 正如您所看到的,我的部分使用了相同的单词,因此我的脚本将查找这两个单词,并在我的模板中显示这两个单词 这就是它的工作原理 视图.py def car_p1(): file = open
第1部分
和第2部分
这是我的车。txt
PART 1
car toyota
PART 2
car toyota
正如您所看到的,我的部分使用了相同的单词,因此我的脚本将查找这两个单词,并在我的模板中显示这两个单词
这就是它的工作原理
视图.py
def car_p1():
file = open("car.txt","r")
content = file.read()
file.close()
car = re.findall('car\s(.*?)\s',open('car.txt','r').read())
if car:
print car
else:
print 'no car found!'
return car[0]
def car_p2():
file = open("car.txt","r")
content = file.read()
file.close()
car = re.findall('car\s(.*?)\s',open('car.txt','r').read())
if car:
print car
else:
print 'no car found!'
return car[1]
def get_items(request):
car = car_p1()
car2 = car_p2()
if 'car' in request.POST:
car_change(request)
return redirect('get_items')
return render(request, 'cars.html', {'car':car, 'car2':car2,})
def car_change(request):
car = car_p1()
car2 = car_p2()
if request.method == 'POST':
change_car = str(request.POST['car_1'])
change_car_2 = str(request.POST['car_2'])
filedata= None
with open('car.txt', 'r') as f:
filedata = f.read()
filedata=filedata.replace(car , change_car , 1)
filedata=filedata.replace(car2 , change_car_2 , 1)
with open('car.txt', 'wb') as f:
f.writelines(filedata)
return render(request, 'cars.html')
这是我的问题。我想把第一部分从丰田换成现代,效果还可以。
我得到了这样的东西
第一部分
现代汽车
第二部分
丰田汽车
但是如果我想把第二部分从丰田换成现代,第二部分就不会被替换,它会替换我的第一部分。。得到这样的东西:
def replace_second_car(filedata, old_car, new_car):
places = [i.start() for i in re.finditer('car\s(.*?)\s',filedata)]
start_place = places[1]
return filedata[:start_place] + filedata[start_place:].replace(old_car, new_car)
filedata = replace_second_car(filedata, car2, change_car_2)
第一部分
现代汽车
第二部分
丰田汽车
我想让第二部分像第一部分一样工作。。。我的代码怎么了
这是我的html:
<form method="post" class="" action="">{% csrf_token %}
<label for="car1">CAR 1: </label>
<input id="car1" class="form-control" type="text" name="car_1" value="{{ car }}">
<br>
<label for="car2">CAR 2: </label>
<input id="car2" class="form-control" type="text" name="car_2" value="{{ car2 }}">
<br>
<br>
<input type="submit" name="car" class="btn btn-primary btn-lg btn-block" value="Save">
</form>
{%csrf\u令牌%}
第一辆车:
第二辆车:
希望你能帮助我
我将非常感谢你的帮助
谢谢 问题是replace
将只替换字符串中的前N个匹配项。如果需要替换第二个引用,可以实现自定义方法,如下所示:
def replace_second_car(filedata, old_car, new_car):
places = [i.start() for i in re.finditer('car\s(.*?)\s',filedata)]
start_place = places[1]
return filedata[:start_place] + filedata[start_place:].replace(old_car, new_car)
filedata = replace_second_car(filedata, car2, change_car_2)
现在,在视图中,您可以这样使用它:
def replace_second_car(filedata, old_car, new_car):
places = [i.start() for i in re.finditer('car\s(.*?)\s',filedata)]
start_place = places[1]
return filedata[:start_place] + filedata[start_place:].replace(old_car, new_car)
filedata = replace_second_car(filedata, car2, change_car_2)
问题是replace
将只替换字符串中的前N个匹配项。如果需要替换第二个引用,可以实现自定义方法,如下所示:
def replace_second_car(filedata, old_car, new_car):
places = [i.start() for i in re.finditer('car\s(.*?)\s',filedata)]
start_place = places[1]
return filedata[:start_place] + filedata[start_place:].replace(old_car, new_car)
filedata = replace_second_car(filedata, car2, change_car_2)
现在,在视图中,您可以这样使用它:
def replace_second_car(filedata, old_car, new_car):
places = [i.start() for i in re.finditer('car\s(.*?)\s',filedata)]
start_place = places[1]
return filedata[:start_place] + filedata[start_place:].replace(old_car, new_car)
filedata = replace_second_car(filedata, car2, change_car_2)
如前所述,当您将整个文件读入一个字符串filedata
时,始终替换第一个匹配项。如果toyota
只出现一次就可以了,但如果出现多次就会失败
您可以从右到左替换car2的filedata
字符串
更改filedata=filedata.replace(car2,Change\u car\u 2,1)
为filedata=Change\u car\u 2.join(filedata.rsplit(car2,1))
如上所述,当您将整个文件读入一个字符串filedata
时,始终替换第一个匹配项。如果toyota
只出现一次就可以了,但如果出现多次就会失败
您可以从右到左替换car2的filedata
字符串
更改filedata=filedata.replace(car2,Change\u car\u 2,1)
为filedata=Change\u car\u 2.join(filedata.rsplit(car2,1))
OP返回car\u p2()中的car[1],因此只出现一次。OP的替换功能有效properly@HaifengZhangOP初始文件包括两个相同的行:cartoyota
。他试着只更换了第二辆车。汽车p1()在零件1区域返回丰田,汽车p2()在零件2区域返回丰田area@HaifengZhang这是真的,但当他真的“替换”(car2,“honda”)时,这只替换了第一辆丰田。因为car=car2='toyota'.didnotcie OP将整个文件读取为一个字符串,+1 for youOP返回car_p2()中的car[1],因此只出现一次。OP的替换功能有效properly@HaifengZhangOP初始文件包括两个相同的行:cartoyota
。他试着只更换了第二辆车。汽车p1()在零件1区域返回丰田,汽车p2()在零件2区域返回丰田area@HaifengZhang这是真的,但当他真的“替换”(car2,“honda”)时,这只替换了第一辆丰田。因为car=car2='toyota'。我没有把整个文件读成一个字符串,+1代表你