gpt4 book ai didi

python - 循环输入目录名称(字符串错误)

转载 作者:行者123 更新时间:2023-11-30 22:53:26 25 4
gpt4 key购买 nike

我对 python 相当陌生,所以我提前为没有最佳代码而道歉:)

无论如何,我正在尝试使用 matplotlib 包做一些绘图,目前处于此位置:

import os
import numpy as np
import matplotlib.pyplot as plt
import re

PATH_TO_YDATA1 = '401\PTV-06'
PATH_TO_YDATA2 = '401\PTV-11'
PATH_TO_YDATA3 = '401\PTV-16'
PATH_TO_YDATA4 = '401\PTV-21'
PATH_TO_YDATA5 = '401\PTV-26'
PATH_TO_YDATA6 = '401\PTV-31'
PATH_TO_YDATA7 = '401\PTV-36'
PATH_TO_YDATA8 = '401\PTV-REF'

x = np.loadtxt('401\dosex.txt')*1.1

path = [1, 2, 3, 4, 5, 6, 7, 8]

for pathnumber in path:
pathname = "%s%d" %("PATH_TO_YDATA", pathnumber)
print pathname
for f in sorted(os.listdir(pathname), key=lambda f: int(f.split('-')[-2])):
y = np.loadtxt(pathname + '/' + f)
if int(f.split('-')[-2]) < 90:
plt.plot(x, y*100, color='#70ad47', linestyle='dashed', linewidth=1.0, label=f.split('-')[-2] + '/' + str(360 - int(f.split('-')[-2])))
elif int(f.split('-')[-2]) == 90:
plt.plot(x, y * 100, color='#5b9bd5', linestyle='solid', linewidth=2.0, label=f.split('-')[-2] + '/' + str(360 - int(f.split('-')[-2])))
elif int(f.split('-')[-2]) > 90:
plt.plot(x, y * 100, color='#ed7d31', linestyle='dashed', linewidth=1.0, label=f.split('-')[-2] + '/' + str(360 - int(f.split('-')[-2])))
plt.subplot(2, 4, 1)
plt.axis([0, 100, 0, 100])
plt.grid(True)
plt.title(re.split('[- .]', f)[-2])

plt.plot((77, 77), (0, 100), 'k-')
plt.show()

我知道也可以循环遍历 PATH_TO_YDATA# = ... 而不是 8 行。但我只是一次迈出一步:)

Nopw,我的问题是,在“打印路径名”行,我实际上在第一个循环中得到了 PATH_TO_YDATA1 的输出,然后它就停止并出现错误:

WindowsError: [Error 3] The system cannot find the path specified: 'PATH_TO_YDATA1/*.*'

而且我知道,如果我只在两个地方输入 PATH_TO_YDATA1 而不是路径名,代码就可以工作。所以我的猜测是,它与文件夹路径有关,可能不是字符串或其他东西。但是,我似乎无法弄清楚如何将其变成“不是字符串”,以便代码将其读取为路径目录,而不仅仅是一些随机文本。

所以基本上,如果我手动输入 PATH_TO_YDATA# 而不是使用循环路径名,代码就会工作,因此缺陷出现在路径名循环处。

提前致谢!

最佳答案

在循环中,pathname 并不是指您之前定义的变量,它只是一个字符串。要从包含变量名称的字符串中获取变量的值(实际路径),可以使用eval(pathname)。例如:

PATH_TO_YDATA1 = '401\PTV-06'
PATH_TO_YDATA2 = '401\PTV-11'
PATH_TO_YDATA3 = '401\PTV-16'

path = [1,2,3]

for pathnumber in path:
path = "%s%d"%("PATH_TO_YDATA",pathnumber)
print(path, eval(path))

打印:

PATH_TO_YDATA1 401\PTV-06

PATH_TO_YDATA2 401\PTV-11

PATH_TO_YDATA3 401\PTV-16

关于python - 循环输入目录名称(字符串错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38198137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com