我正在创建一个计算图像的欧几里得距离的相似度程序,我在寻找用户输入,以便如果他们想使用部分代码,他们可以选择。在这种情况下,需要将一行(在dc2.py中具体为13)更改为“”。我该怎么办?
我尝试在.write
旁边使用open函数,通过open(dc.py).read()
打开文件,但无济于事。
这会将图像转换为数组(程序dc2.py):
import numpy as np
import imageio
from numpy import array
img = imageio.imread("Machine Screw.jpg")
data = array(img)
with open('test2.txt', 'w') as outfile:
np.savetxt(outfile, data_slice, fmt='%-7.2f')
exec(open("Halfer.py").read())
以下是更改以前的.py的代码:
inp = input("Want to use halfer?: ")
if inp == 'y':
the_file = open('dc2.py', 'a')
the_file[13].write(' ')
我期望:
这是实际发生的事情:
Traceback (most recent call last):
File "C:/Users/User/Desktop/PySimCode/Resources/Ini.py", line 5, in <module>
the_file[13].write(' ')
TypeError: '_io.TextIOWrapper' object is not subscriptable
谢谢您的帮助!
答案 0 :(得分:1)
您要实现的解决方案不太“ Pythonic”。我认为您应该将dc2.py
文件作为模块导入Ini.py
脚本,并使用基于用户输入的参数来操纵dc2.py
脚本的行为。
例如:
dc2.py
import numpy as np
import imageio
import subprocess
from numpy import array
def image_converter(halfer_needed=True):
img = imageio.imread("Machine Screw.jpg")
data = array(img)
with open('test2.txt', 'w') as outfile:
np.savetxt(outfile, data, fmt='%-7.2f')
if halfer_needed:
sp = subprocess.Popen(["python", "Halfer.py"]) # Call Halfer.py script
ret_stdout, ret_stderr = sp.communicate() # These variables contain the STDOUT and STDERR
ret_retcode = sp.returncode # This variable conains the return code of your command
我认为如果用户需要,您想调用Halfer.py
脚本,因此,如上所示,我已使用子进程模块来调用此脚本。您可以查看有关此模块的更多详细信息和选项:https://docs.python.org/3/library/subprocess.html
Ini.py
from dc2 import image_converter # Import your function from "dc2.py" script
inp = str(input("Want to use halfer?: "))
if inp == 'y':
image_converter(halfer_needed=False)
image_converter() # you don't need to define the keyword argument because the default value is True.
答案 1 :(得分:1)
尝试一下:
inp = raw_input("Want to use halfer?: ")
if inp == 'y':
origin_file = open('dc2.py','r').readlines()
the_file = open('dc2.py','w')
origin_file[12] = '\n'
for line in origin_file:
the_file.write(line)
the_file.close()
一些我想补充的笔记:
input
读取一段文本并进行分析。您可能应该始终使用raw_input
。open
执行不同的操作,具体取决于 mode 参数。就我而言,我使用r
进行阅读,然后使用w
进行写作。 (我不认为可以在同一<open>
对象上进行读写)。 a
被追加,仅允许您添加行。阅读here <open>
获取内容,请使用.read()
或.readlines()
。'\n'
,而不是' '
。.close()
上致电<open>
!希望这对您有用!
答案 2 :(得分:1)
可以,但是不可以。
您正在尝试基于um imput激活一些代码,这可以将代码封装在函数中,您可以根据条件导入和删节。 您正在尝试通过读取文件并手动执行文件来获得此结果,基本上,您正在执行Python解释器应该执行的操作。
首先,您需要将模块更改为可随意激活的内容,而不是在文件加载后立即激活,例如dc2.py如下所示:
import numpy as np
import imageio
from numpy import array
import Halfer # <- here you import the py file, not open and read
def run(use_halfer):
img = imageio.imread("Machine Screw.jpg")
data = array(img)
with open('test2.txt', 'w') as outfile:
np.savetxt(outfile, data_slice, fmt='%-7.2f')
if use_halfer:
Halfer.run()
..和Halfer.py文件应如下所示:
def run():
# ..all your Halfer.py code here inside the run function
..然后脚本的起点看起来像:
import dc2
inp = input("Want to use halfer?: ")
dc2.run(inp == 'y') # <- here you tell dc2 to use halfer or not.