鱼C论坛

 找回密码
 立即注册
查看: 2348|回复: 24

[已解决]修改另外一个python程序中的参数

[复制链接]
发表于 2020-9-18 10:00:50 | 显示全部楼层 |阅读模式
20鱼币
本帖最后由 JoseM 于 2020-9-18 13:40 编辑

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

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

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


复制代码


假设现在有另外一个python code 2,举例如下,
  1. A = A_Raw
  2. B = B_Raw
  3. print(A)
  4. priint(B)
复制代码


请问操作能把这个程序保存为
  1. A="0.222W"
  2. B="100deg"
  3. print(A)
  4. 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")

最佳答案

查看完整内容

其实这样写,太复杂了,没必要,按我原先写得就可以了 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" ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-18 10:10:48 From FishC Mobile | 显示全部楼层
本帖最后由 hrp 于 2020-9-18 10:15 编辑

code2要修改code1中的变量?
试试code2中导入code1(import code1),code2中修改时用code1.A=xxx
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-18 10:15:18 | 显示全部楼层
hrp 发表于 2020-9-18 10:10
code2从code1导入所需的变量就可以了

由于我要保存100多遍code2, 每个code2都保存不同的数据,第一段程序我没加循环。 目前想实现的功能是把code2中的变量A_Raw,B_Raw直接替换成code1中读取的数据,可以把这个需求想象成保存为一个新的直接把变量赋予数据的”文本“,不通过调取code1的这种方式。谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-18 10:16:40 | 显示全部楼层
你怎么不写成一个代码,这种明显慢一些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-18 10:18:32 | 显示全部楼层
bonst 发表于 2020-9-18 10:16
你怎么不写成一个代码,这种明显慢一些

写成一个代码, 工程软件不识别 会报错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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


我以为你要在code2修改code1的变量呢,像你这种情况把code2写成类,在code1中导入code2,然后创建不同code2实例保存不同数据,不可以吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

工作第一年的是业余学的小甲鱼课程, 现在早就忘了,这些还是自己这几天摸索的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-18 10:24:16 From FishC Mobile | 显示全部楼层
JoseM 发表于 2020-9-18 10:20
工作第一年的是业余学的小甲鱼课程, 现在早就忘了,这些还是自己这几天摸索的

或者把我一楼的回答反过来,也可以达到在code1中赋值code2变量的目的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-18 10:29:05 | 显示全部楼层
再说的简单点,就是这样的需求, 直接对code2操作 替换里面的数据。 我的思路是code1从excel中获取完数据, 然后对code2处理,找到A变量,把里面的A_Raw直接替换成code1从excel中获得的数据,再保存code2 Lenovo20200918102533.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-18 11:19:32 | 显示全部楼层
hrp 发表于 2020-9-18 10:24
或者把我一楼的回答反过来,也可以达到在code1中赋值code2变量的目的

有代码吗?我不是专门做程序的 比较业余
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-18 11:37:06 | 显示全部楼层
  1. from string import Template
复制代码

看看这个能不能解决你的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-18 11:58:06 From FishC Mobile | 显示全部楼层
本帖最后由 hrp 于 2020-9-18 11:59 编辑

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

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


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

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

  6. code2.dosomething(igetthisA, igetthisB)
复制代码

  1. # code2.py
  2. def dosomething(x, y):
  3.     print(x)
  4.     print(y)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

使用道具 举报

发表于 2020-9-18 12:15:36 From FishC Mobile | 显示全部楼层
JoseM 发表于 2020-9-18 12:08
没错 就是这么暴力,我要直接修改code2的变量为具体数据,然后另存为新的python。 保存好的python我用来 ...

修改源代码的方式改变量值,如果值是一些字符串、数字类型或内建类型等,还能改,要是一些其他对象你就改不了了,这样写,小甲鱼知道了估计会气的顺着网线去打你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

我不修改code2里面的其他任何内容,只把一个变量用源代码的方式给改了,再另存。你刚给我那不太会弄啊,能看下我主贴上的code1吗  直接在那上面加上调用保存code2的程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-18 13:49:11 | 显示全部楼层
全部回复都看完了,也没看懂意思。。。。。。。。
code1获取了excel内的数据,那把数据存到临时.txt里
然后code2再读取这个txt,赋值给code2里额变量来用,不就好了么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-18 14:08:12 | 显示全部楼层
本帖最后由 JoseM 于 2020-9-18 14:13 编辑
疾风怪盗 发表于 2020-9-18 13:49
全部回复都看完了,也没看懂意思。。。。。。。。
code1获取了excel内的数据,那把数据存到临时.txt里
然 ...


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

使用道具 举报

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

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

能做到的就是一个中间人,txt,code1保存到txt,code2从txt读取
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-18 14:17:19 | 显示全部楼层
疾风怪盗 发表于 2020-9-18 14:14
这相当于直接修改了code2的代码,应该做不到的吧

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

嗯 那如果做不到 python能处理文档吗? 比如我把code2代码拷贝出来 成一个txt, 然后我code1搜索这个txt中的关键字 replace 成我要换的数据 再save 最后我再保存成python好了。 多谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 17:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表