【问题标题】:For loop isn't working in python 3For循环在python 3中不起作用
【发布时间】:2017-07-20 23:57:37
【问题描述】:

我正在尝试将来自 URL 的文件保存到我计算机上的文件夹中,但列表中有 732 个 URL(保存时会提供实验数据)。我正在尝试在所有这些 URL 上运行 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 是我的 URL 列表,但我不知道如何处理 for loop 以将每个数据集保存到新文件中。目前,此代码仅将单个实验的数据写入文件并停在那里。如果我尝试将其保存为不同的文件名,它会获取不同的实验数据并将其保存到文件中。帮忙?

【问题讨论】:

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


【解决方案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):

【讨论】:

  • 可以,非常感谢!并行的两次迭代是什么意思?
  • 新的for 语句同时处理两个迭代器(imyurl123)。
  • 我想知道 for 循环是否有效,那么我现在是否尝试将所有这些 .txt 文件放入单独的数据帧中?
  • 当前使用此代码:randomdf = pd.read_csv("/Users/lauren/Desktop/IDData/file0",sep='\t', header = None)
  • 是的,单个 DF 应该和单个文本文件一样工作。
【解决方案2】:

您的错误只是在编写文件时。并不是说 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

【讨论】:

    猜你喜欢
    • 2018-08-01
    • 2018-09-09
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多