我有几行代码应该用包含多行的变量替换一个字符串,如果该变量不包含任何内容,则只需将字符串替换为空白
我当前具有替换字符串的文件看起来像
"resources": [
stringtobereplaced
]
我当前的代码替换如下
with open('filepaths', "r+") as f:
for _ in range(1):
next(f)
for lines in f:
resourceslist = lines
print(resourceslist)
os.chdir(base_dir)
with open(unique_filename) as f:
newText=f.read().replace('stringtobereplaced', resourceslist)
with open(unique_filename, "w") as f:
f.write(newText)
变量资源列表中包含以下内容。
"/home/django/copypaste/cleanup/var/media/admin/9514a8e4-8ad8-4917-a162-6d618b6616d3/splash279/lib/props/barbershop_pole.blend",
"/home/django/copypaste/cleanup/var/media/admin/9514a8e4-8ad8-4917-a162-6d618b6616d3/splash279/lib/props/hairdryer.blend",
"/home/django/copypaste/cleanup/var/media/admin/9514a8e4-8ad8-4917-a162-6d618b6616d3/splash279/lib/chars/pigeon.blend",
"/home/django/copypaste/cleanup/var/media/admin/9514a8e4-8ad8-4917-a162-6d618b6616d3/splash279/lib/chars/agent.blend",
"/home/django/copypaste/cleanup/var/media/admin/9514a8e4-8ad8-4917-a162-6d618b6616d3/splash279/lib/nodes/nodes_shaders.blend",
"/home/django/copypaste/cleanup/var/media/admin/9514a8e4-8ad8-4917-a162-6d618b6616d3/splash279/tools/camera_rig.blend",
但是当我用变量资源列表替换文件中的字符串时,它仅输出一行。如果变量中没有任何内容,我如何设法将它们全部添加到文件中或将其替换为空白。
电流输出示例:
"resources": [
"/home/django/copypaste/cleanup/var/media/admin/089a4bd9-a618-41bd-a09b-f3616c773199/splash279/tools/camera_rig.blend",
]
答案 0 :(得分:1)
遍历文件对象会产生文件的每一行,因此循环变量lines
在任何给定时间都包含文件的一行。每次循环时,您都会用resourceslist
的当前值覆盖lines
的内容,因此最后它包含文件的最后一行。
如果缩进无关紧要,则可以仅设置resourceslist = f.read()
而不是循环。如果您希望资源文件的每一行都以stringtobereplaced的相同方式缩进,那么您将不得不对模板文件进行一些更复杂的处理(可能与正则表达式匹配,例如“ ^(?P。*)stringtobereplaced ”,并在每个资源行的前面加上匹配对象的“前缀”组。