import concurrent.futures
import urllib.request
import json
myurls = {}
for x in range(1, 15):
for y in range(1, 87):
strvar1 = "%s" % (x)
strvar2 = "%s" % (y)
with open("C:\\Python33\\NASDAQ Stock Strings\\NASDAQ_Config_File_{}_{}.txt".format(x,y),"r") as f:
myurls[x,y] = f.read().replace('\n', '')
print("myurls_" + str(strvar1) + "_" + str(strvar2) + "=", myurls[x,y])
def myglob():
global myurls
URLS = [myurls2_1_1,myurls2_1_2,myurls2_1_3,myurls2_1_4,myurls2_1_5 ETC>>>ETC >>>]
下面的代码工作正常。这个想法是:
答案 0 :(得分:1)
你说
def myglob(): global myurls
语法明智,但我想要使用的变量列表,即
myurls2_1_1
,myurls2_1_2
等,会抛出一个错误,说明它们没有被定义。
这是对的。但是你非常接近:只需按照你定义的方式访问它们:myurls[1,1]
或你如何定义它们。
以动态的方式定义变量几乎是不可能的。通常你可以通过任何dict键或列表索引访问来实现它。
正如您现在提供的一个例子,我可以准确地展示您的行为:
myurls = {}
for x in range(1, 15):
for y in range(1, 87):
strvar1 = "%s" % (x) # you can omit these.
strvar2 = "%s" % (y)
with open("C:\\Python33\\NASDAQ Stock Strings\\NASDAQ_Config_File_{}_{}.txt".format(x,y),"r") as f: # This is NOT the right place to put an application-specific config file.
myurls[x,y] = f.read().replace('\n', '')
print("myurls[%d,%d] = %s" % (x, y, myurls[x,y]))
def myglob(): # this function is completely pointless.
global myurls
# Construct your urls list only after you have everything that belongs in it, i. e. on the correct indentation level:
urls = [myurls[1,1], myurls[1,2], myurls[1,3], myurls[1,4], ...]
这将是一种方法。它看起来非常复杂和怪异,这是最后一段很长的路线。
但你可以用列表理解来缩短它:
urls = [myurls[x,y] for x in range(1, 15) for y in range(1, 87)]
但是,你可能会被问到:"为什么不在途中建造呢?"
嗯,我们走了:
myurls = {}
urls = []
for x in range(1, 15):
for y in range(1, 87):
with open("C:\\Python33\\NASDAQ Stock Strings\\NASDAQ_Config_File_{}_{}.txt".format(x,y), "r") as f:
thisfile = f.read().replace('\n', '')
myurls[x,y] = thisfile
urls.append(thisfile)
print("myurls[%d,%d] = %s" % (x, y, thisfile))
你就是。
没有必要将它们全部放入列表中,因为这与并行化无关,而后者似乎只是稍后出现。
所有重要的是,您在并行化开始时出现urls
。如果这种情况立即发生或逐项无关紧要。