因为循环不在python 3中工作

时间:2017-07-20 23:57:37

标签: python python-3.x loops for-loop

我尝试将网址中的文件保存到计算机上的文件夹中,但我在列表中有732个网址(保存后会提供实验数据)。我尝试在所有这些网址上运行for loop,以便将每个数据集保存到自己的文件中。这就是我现在正在做的事情:

for i in ExperimentURLs:
    myurl123 = str(i)
    myreq = urllib.request.urlopen(myurl123)    
    mydata = myreq.read()
    with open('/Users/lauren/Desktop/IDData/file', 'wb') as ofile:
        ofile.write(mydata)

ExperimentURLs是我的网址列表,但我不知道如何处理for loop将每个数据集保存到新文件中。目前,此代码仅将单个实验的数据写入文件并停在那里。如果我尝试将其保存为其他文件名,则需要使用不同的实验数据并将其保存到文件中。帮助

2 个答案:

答案 0 :(得分:1)

首先,每次循环时都需要自动生成一个新的输出文件名。我会在下面给你一些简单的版本。另请注意,URL已经是字符串;你不必转换它们。

pos = 0
for myurl123 in ExperimentURLs:
    myreq = urllib.request.urlopen(myurl123)    
    mydata = myreq.read()
    out_file = '/Users/lauren/Desktop/IDData/file' + str(pos)
    with open(out_file, 'wb') as ofile:
        ofile.write(mydata)
    pos += 1

这能解决您的问题吗?

顺便说一句,你可以与

并行完成两次迭代
for i, myurl123 in enumerate(ExperimentURLs):

答案 1 :(得分:0)

您的错误只是在编写文件时。并不是说for循环不起作用。您是一次又一次地写入同一个文件。这是一个使用请求的修改版本。您只需在保存时更改文件名即可。

import requests

ExperimentURLs = [
    "https://www.google.com",
    "https://www.yahoo.com"
]

counter = 0;
for i in ExperimentURLs:
    myurl123 = str(i)
    r = requests.get(myurl123)
    mydata = r.text.encode('utf-8').strip()
    fileName = counter
    with open("results/"+str(fileName)+".html", 'w') as ofile:
        ofile.write(mydata)
    counter += 1