Etwas sicherer als reguläre Ausdrücke wäre es wahrscheinlich auf dem AST von dem Quelltext zu operieren. `redbaron` ist für Python so etwas ähnliches wie BeautifulSoup für HTML:
Code: Alles auswählen
from __future__ import absolute_import, division, print_function
from redbaron import RedBaron
from redbaron.nodes import ListNode
SOURCE = '''
class Spam:
x=[1,2,3]
class parameter:
a=2
b=[1,2,3]
c=4
d=[
42,
23,
4711,
]
class Parrot:
y=[3,2,1]
'''
def is_list_node(node):
return isinstance(node, ListNode)
def main():
np_array_call = RedBaron('np.array()')[0]
red = RedBaron(SOURCE)
parameter_class = red.find('class', name='parameter')
for assignment in parameter_class('assignment', value=is_list_node):
new_value = np_array_call.copy()
new_value.call.value = assignment.value
assignment.value = new_value
print(red.dumps())
if __name__ == '__main__':
main()
Ausgabe:
Code: Alles auswählen
class Spam:
x=[1,2,3]
class parameter:
a=2
b=np.array([1,2,3])
c=4
d=np.array([
42,
23,
4711,
])
class Parrot:
y=[3,2,1]