首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python: csv阅读器的URL数据

Python: csv阅读器的URL数据
EN

Stack Overflow用户
提问于 2017-08-25 10:29:36
回答 1查看 112关注 0票数 1

我试图用Python将url请求的结果转换为CSV读取器对象。输出似乎很好,但发生了以下错误:

代码语言:javascript
复制
    for study_id, sample_id, run_id in reader:
ValueError: not enough values to unpack (expected 3, got 1)

首先,我请求数据并将其转换为字符串数据:

代码语言:javascript
复制
req = urllib.request.Request(url=url_get_project_runs, headers={'Content-Type': 'text/plain'})
        res = urllib.request.urlopen(req)
        dec_res =  res.read().decode()
        sys.stderr.write(str(dec_res)) --> for the print see below
        return dec_res

印刷品将显示如下:

代码语言:javascript
复制
ERP001736,ERS494374,ERR598958
ERP001736,ERS494394,ERR598963
ERP001736,ERS494431,ERR598964
ERP001736,ERS494445,ERR599170
ERP001736,ERS494488,ERR598996
ERP001736,ERS494518,ERR598976
ERP001736,ERS494559,ERR598986
ERP001736,ERS494579,ERR599078
ERP001736,ERS494616,ERR598944
ERP001736,ERS494628,ERR599001
ERP001736,ERS488919,ERR1701760

这在我看来很好,因为项目是用逗号分隔的,“行”是完整的。但是,如果我使用它作为CSV读取器的输入,并尝试打印这三列,如下所示:

代码语言:javascript
复制
reader = csv.reader(dec_res, delimiter=',')
        for study_id, sample_id, run_id in reader:
            print(study_id + ", " + sample_id + ", " + run_id)

将发生以下错误:ValueError: not enough values to unpack (expected 3, got 1)

我进一步测试了一些代码以发现问题:

代码语言:javascript
复制
 for row in reader:
            sys.stderr.write(str(row))

这将使:

代码语言:javascript
复制
['E']['R']['P']['0']['0']['1']['7']['3']['6']['', '']['E']['R']['S']['4']['7']...etc
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-25 10:38:17

您正在将str传递给csv读取器,它需要逐行迭代。str是一种逐字符迭代.用StringIO包装您的字符串,或者使用splitlines (或提供逐行迭代的任何其他方法)。

代码语言:javascript
复制
import csv
from io import StringIO

dec_res = """ERP001736,ERS494374,ERR598958
ERP001736,ERS494394,ERR598963
ERP001736,ERS494431,ERR598964
ERP001736,ERS494445,ERR599170
ERP001736,ERS494488,ERR598996
ERP001736,ERS494518,ERR598976
ERP001736,ERS494559,ERR598986
ERP001736,ERS494579,ERR599078
ERP001736,ERS494616,ERR598944
ERP001736,ERS494628,ERR599001
ERP001736,ERS488919,ERR1701760"""

reader = csv.reader(StringIO(dec_res), delimiter=',')
#reader = csv.reader(dec_res.splitlines(), delimiter=',')

for study_id, sample_id, run_id in reader:
    print(study_id + ", " + sample_id + ", " + run_id)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45879419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档