JoseM 发表于 2020-9-18 10:00:50

修改另外一个python程序中的参数

本帖最后由 JoseM 于 2020-9-18 13:40 编辑

工作中遇到处理数据的问题,简单描述下我的困扰。

我需要从excel中读取数据,然后把这个数据存到另外一个python 中 ,另外一个python再导入到工程软件,做仿真脚本的宏。

请问要怎么实现,如下是第一段程序,读取到了excel中的数据,
from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.writer.excel import ExcelWriter
rEIRP = load_workbook('C:\\Users\\gaoqiang5\\Desktop\\1111.xlsx')
A_sheet = rEIRP['Sheet1']
sheet = rEIRP.active
b = sheet.max_row
A_AG0_V1_P = A_sheet.cell(4,2).value
A_AG0_V1_phi = A_sheet.cell(4,3).value




假设现在有另外一个python code 2,举例如下,
A = A_Raw
B = B_Raw
print(A)
priint(B)

请问操作能把这个程序保存为
A="0.222W"
B="100deg"
print(A)
print(B)

疾风怪盗 发表于 2020-9-18 10:00:51

本帖最后由 疾风怪盗 于 2020-9-18 15:22 编辑

JoseM 发表于 2020-9-18 15:04
顺着你的思路, 我又在网上搜了一些代码,整体如下, 但是运行会报错,能看看这个代码哪里有问题么?

...
其实这样写,太复杂了,没必要,按我原先写得就可以了

import os


with open('test.txt', mode="r", encoding="utf-8") as f:
    test_data=f.read()
#print(test_data)

find_str = {"A_Raw":A_AG0_V1_P,"B_Raw":A_AG0_V1_phi}
for key,value in find_str.items():
    if test_data.find(key)>0:
      test_data=test_data.replace(key,f'\'{value}\'')
print(test_data)

with open('new.txt', mode="w", encoding="utf-8") as f_new:
    f_new.write(test_data)

if os.path.exists('new.py'):
    os.remove('new.py')
os.rename("new.txt", "new.py")

hrp 发表于 2020-9-18 10:10:48

本帖最后由 hrp 于 2020-9-18 10:15 编辑

code2要修改code1中的变量?
试试code2中导入code1(import code1),code2中修改时用code1.A=xxx

JoseM 发表于 2020-9-18 10:15:18

hrp 发表于 2020-9-18 10:10
code2从code1导入所需的变量就可以了

由于我要保存100多遍code2, 每个code2都保存不同的数据,第一段程序我没加循环。 目前想实现的功能是把code2中的变量A_Raw,B_Raw直接替换成code1中读取的数据,可以把这个需求想象成保存为一个新的直接把变量赋予数据的”文本“,不通过调取code1的这种方式。谢谢。

bonst 发表于 2020-9-18 10:16:40

你怎么不写成一个代码,这种明显慢一些

JoseM 发表于 2020-9-18 10:18:32

bonst 发表于 2020-9-18 10:16
你怎么不写成一个代码,这种明显慢一些

写成一个代码, 工程软件不识别 会报错。

hrp 发表于 2020-9-18 10:18:57

JoseM 发表于 2020-9-18 10:15
由于我要保存100多遍code2, 每个code2都保存不同的数据,第一段程序我没加循环。 目前想实现的功能是把c ...

我以为你要在code2修改code1的变量呢,像你这种情况把code2写成类,在code1中导入code2,然后创建不同code2实例保存不同数据,不可以吗

JoseM 发表于 2020-9-18 10:20:27

hrp 发表于 2020-9-18 10:18
我以为你要在code2修改code1的变量呢,像你这种情况把code2写成类,在code1中导入code2,然后创建不同c ...

{:10_277:} 工作第一年的是业余学的小甲鱼课程, 现在早就忘了,这些还是自己这几天摸索的

hrp 发表于 2020-9-18 10:24:16

JoseM 发表于 2020-9-18 10:20
工作第一年的是业余学的小甲鱼课程, 现在早就忘了,这些还是自己这几天摸索的

或者把我一楼的回答反过来,也可以达到在code1中赋值code2变量的目的

JoseM 发表于 2020-9-18 10:29:05

再说的简单点,就是这样的需求, 直接对code2操作 替换里面的数据。 我的思路是code1从excel中获取完数据, 然后对code2处理,找到A变量,把里面的A_Raw直接替换成code1从excel中获得的数据,再保存code2{:10_254:}

JoseM 发表于 2020-9-18 11:19:32

hrp 发表于 2020-9-18 10:24
或者把我一楼的回答反过来,也可以达到在code1中赋值code2变量的目的

有代码吗?我不是专门做程序的 比较业余

挥舞乾坤 发表于 2020-9-18 11:37:06

from string import Template
看看这个能不能解决你的问题

hrp 发表于 2020-9-18 11:58:06

本帖最后由 hrp 于 2020-9-18 11:59 编辑

你的意思是运行code1读取数据,然后通过修改code2源代码的方式将code2相应的变量修改成code1读取到的值,然后保存code2?你这想法很暴力呀,而且没法达成你的目的。

如果你code1读取到的数据,并不想马上让code2运行,只是想不定哪天运行,那code1可以用pickle模块将读取到的数据保存到文件,待想运行code2的时候在循环读取code1保存的文件,做相应的操作。


如果code1退出之前运行code2,可以用以下例子:
# code1.py
import code2

# 假设你读取到的是下面这个
igetthisA = 'abc'
igetthisB = 'def'

code2.dosomething(igetthisA, igetthisB)


# code2.py
def dosomething(x, y):
    print(x)
    print(y)

JoseM 发表于 2020-9-18 12:08:58

hrp 发表于 2020-9-18 11:58
你的意思是运行code1读取数据,然后通过修改code2源代码的方式将code2相应的变量修改成code1读取到的值,然 ...

没错 就是这么暴力,我要直接修改code2的变量为具体数据,然后另存为新的python。 保存好的python我用来去在我的工程仿真里面 作为仿真的数据处理脚本。这达到了我的目的,因为仿真软件不识别很复杂的程序 库也没那么多,只能先做这一步。我先试试你的方法

hrp 发表于 2020-9-18 12:15:36

JoseM 发表于 2020-9-18 12:08
没错 就是这么暴力,我要直接修改code2的变量为具体数据,然后另存为新的python。 保存好的python我用来 ...

修改源代码的方式改变量值,如果值是一些字符串、数字类型或内建类型等,还能改,要是一些其他对象你就改不了了,这样写,小甲鱼知道了估计会气的顺着网线去打你

JoseM 发表于 2020-9-18 13:43:16

hrp 发表于 2020-9-18 12:15
修改源代码的方式改变量值,如果值是一些字符串、数字类型或内建类型等,还能改,要是一些其他对象你就改 ...

我不修改code2里面的其他任何内容,只把一个变量用源代码的方式给改了,再另存。你刚给我那不太会弄啊,能看下我主贴上的code1吗直接在那上面加上调用保存code2的程序

疾风怪盗 发表于 2020-9-18 13:49:11

全部回复都看完了,也没看懂意思。。。。。。。。
code1获取了excel内的数据,那把数据存到临时.txt里
然后code2再读取这个txt,赋值给code2里额变量来用,不就好了么?

JoseM 发表于 2020-9-18 14:08:12

本帖最后由 JoseM 于 2020-9-18 14:13 编辑

疾风怪盗 发表于 2020-9-18 13:49
全部回复都看完了,也没看懂意思。。。。。。。。
code1获取了excel内的数据,那把数据存到临时.txt里
然 ...

{:10_243:}我描述的很不清楚吗? 就是code1获取的数据替换掉code2中的变量 其他全部变, 相当于code2的变量赋值是code1给的,给的方式是直接替换保存code2。 再通俗点说,实际完成的动作就是 我在code2中的A变量本来是A=A_Raw, 我手动把这个语句改为了A=1.然后保存了这个程序。只不过我想让程序做这件事。code2不能有任何其他变动,不能读取excel 或者 txt, 因为code2是工程软件里面的代码,这个工程软件不支持这么做,所以我才想到这个笨的方法,直接用一个程序改另外一个程序的数。

疾风怪盗 发表于 2020-9-18 14:14:00

JoseM 发表于 2020-9-18 14:08
我描述的很不清楚吗? 就是code1获取的数据替换掉code2中的变量 其他全部变, 相当于code2的 ...

这相当于直接修改了code2的代码,应该做不到的吧

能做到的就是一个中间人,txt,code1保存到txt,code2从txt读取

JoseM 发表于 2020-9-18 14:17:19

疾风怪盗 发表于 2020-9-18 14:14
这相当于直接修改了code2的代码,应该做不到的吧

能做到的就是一个中间人,txt,code1保存到txt,code ...

嗯 那如果做不到 python能处理文档吗? 比如我把code2代码拷贝出来 成一个txt, 然后我code1搜索这个txt中的关键字 replace 成我要换的数据 再save{:10_266:} 最后我再保存成python好了。 多谢
页: [1] 2
查看完整版本: 修改另外一个python程序中的参数