<p>当您想从另一个文件调用python函数时,不应该尝试通过调用<code>os.system</code>来运行另一个python进程。只需导入该函数:
<code>from plotrdm import plot_rdm</code></p>
<p>我们不必使用<code>os.filewalk</code>和<code>file.startswith</code>检查,而是可以通过使用nice python库<code>glob</code>来大量清理代码。我投了一个<code>enumerate</code>作为好的措施</p>
<p>新的<strong>rdmsave.py</strong></p>
<pre class="lang-py prettyprint-override"><code>import glob
from plotrdm import plot_rdm
basedir = "."
if __name__ == "__main__":
count = 0
for count, path in enumerate(sorted(glob.glob(f'{basedir}/**/Meadow*.json', recursive=True)), start=1):
print(f"processing {path}")
output_image = f'rdm_{count - 1:02}.png'
print(f"output image will be {output_image}")
plot_rdm(path, output_image)
print(f"processed {count} files")
</code></pre>
<p>请注意,您可能需要将<code>basedir</code>更改回本地路径</p>
<p>您的<strong>绘图rdm.py</strong>将变成:</p>
<pre class="lang-py prettyprint-override"><code>import numpy as np
import matplotlib
import matplotlib.pyplot
import matplotlib.pyplot as plt
import scipy
import scipy.spatial
import scipy.spatial.distance as sd
from scipy.spatial.distance import squareform
import json
import matplotlib.pyplot as plt
def plot_rdm(fpath, output_filename):
with open(fpath) as fhandle:
data = json.load(fhandle)
# inspect rdm stimuli labels
stim = data['stimuli']
# contain all labels for y axis and x axis seperately
y_names = []
for i in stim:
y_names.append(i['name'])
x_names = []
for i in stim:
x_names.append(i['name'])
# create rdm array and squareform
rdm_array = np.array(data['rdm'])
srdm = squareform(rdm_array)
# label x and y axis on rdm
fig, ax = plt.subplots()
rdm = ax.imshow(srdm)
ax.set_xticks(np.arange(len(x_names)))
ax.set_yticks(np.arange(len(y_names)))
ax.set_xticklabels(x_names)
ax.set_yticklabels(y_names)
plt.setp(ax.get_xticklabels(), rotation=90, ha="right", rotation_mode="anchor")
plt.plot(srdm)
plt.imshow(srdm)
plt.colorbar(mappable=None, cax=None, ax=None)
fig.subplots_adjust(bottom=0.23)
plt.savefig(output_filename)
</code></pre>
<p>我将第二个参数<code>output_filename</code>添加到了<code>plot_rdm</code>函数中,以便可以将每个图像存储在一个新文件中</p>
<p>我机器上的输出显示</p>
<pre><code>processing ./5/Meadows_avima-image-version1_v_v2_vital-macaw_2_tree.json
output image will be rdm_00.png
processing ./4/Meadows_avima-image-version1_v_v2_quick-louse_2_tree.json
output image will be rdm_01.png
processing ./1/Meadows_avima-image-version1_v_v2_better-hound_2_tree.json
output image will be rdm_02.png
processing ./3/Meadows_avima-image-version1_v_v2_huge-falcon_2_tree.json
output image will be rdm_03.png
processing ./2/Meadows_avima-image-version1_v_v2_guided-koi_2_tree.json
output image will be rdm_04.png
processed 4 files
</code></pre>
<p>在当前文件夹中创建了4个png文件</p>