我试图创建一个新的创建列表,其中通过for循环的每次迭代将一个新项目附加到列表中。到目前为止的代码如下:
path_start = 'https://promo.betfair.com/betfairsp/prices/dwbfpricesukwin'
file = ".csv"
start = datetime.datetime.strptime("10-02-2007", "%d-%m-%Y")
end = datetime.datetime.strptime("21-02-2019", "%d-%m-%Y")
date_generated = [start + datetime.timedelta(days=x) for x in range(0, (end-start).days)]
date_list = []
for date in date_generated:
date_string = date.strftime("%d%m%Y")
for path_name in date_string:
x = path_start + date_string + file
date_list.append(x)
print(date_list)
当我这样做时,将创建一个列表,但是列表中的每个项目都是相同的。我希望每个项目都使用在上一个for循环中创建的date_string变量,该变量应在每次迭代中更改。这是它创建的列表的示例:
['https://promo.betfair.com/betfairsp/prices/dwbfpricesukwin10022007.csv', 'https://promo.betfair.com/betfairsp/prices/dwbfpricesukwin10022007.csv'
我尝试更改循环的缩进,但这并不能解决问题。
我还尝试使用numpy数组提高效率,但是对此问题的答案(How to declare and add items to an array in Python?)表示使用列表。由于清单特别长,因此任何提高效率的帮助也将受到赞赏。
干杯, 桑迪
答案 0 :(得分:2)
您的问题就在这里
for path_name in date_string:
date_string
此时是字符串值。您的path_name
变量(未在循环内使用)正在字符串中逐个字符地迭代。
这意味着每个条目将有8个值(ddmmyyyy = 8个字符)。如果您查看结果列表中的每第八个条目,则可能会看到更改。
我认为您根本不需要内循环。试试这个:
for date in date_generated:
date_string = date.strftime("%d%m%Y")
x = path_start + date_string + file
date_list.append(x)
答案 1 :(得分:1)
您只需要像下面这样更改for循环:
date_list = []
for date in date_generated:
date_list.append(path_start + date.strftime("%Y%m%d") + file)
print(date_list)
输出示例:
[...'https://promo.betfair.com/betfairsp/prices/dwbfpricesukwin20190124.csv',... 'https://promo.betfair.com/betfairsp/prices/dwbfpricesukwin20190219.csv'...]
注意:不需要第二个循环,因为您不需要在date_string上循环,您需要将日期附加到字符串名称上