【问题标题】:Invalid literal for int - Getting raw data from CSV fileint 的文字无效 - 从 CSV 文件获取原始数据
【发布时间】:2016-04-17 04:15:24
【问题描述】:

我有一个 CSV 文件,其中一行是字符串列表:

['1', '2', '3', '4']

我是这样阅读文件的:

data = sys.argv[1]
with open(data, 'rb') as csvfile:

    query = csv.reader(csvfile, delimiter=',', skipinitialspace=True)

    for row in range(23):
            if row == 1:
            date = next(query)
        elif row == 11:
            cores = next(query) # Problem in this line
        elif row == 13:
            time_interval = next(query)
        elif row == 17:
            number_cores = next(query)
        else:
            next(query)

但是当我这样做时,我没有得到确切的线路。相反,我得到:

["['1'", "'2'", "'3'", "'4']"]

这样,我遇到的问题是我无法将每个元素转换为带有 map 的 int。

我收到以下错误:

ValueError: invalid literal for int() with base 10: 2['1'" 

我想我需要去掉引号“”以及第一个和最后一个 [] 符号。我一直在尝试,但没有成功。

希望我的解释正确。

提前致谢。

【问题讨论】:

  • 你在第 17 行有一个错误......开玩笑的。没有minimal reproducible example,我们无法调试它。
  • 好的,马上就完成代码,抱歉

标签: python csv input format


【解决方案1】:

您的 CSV 解析器(正确地)将方括号和单引号视为字段的一部分。您共享的行是有效的 CSV 行,但不是您想要的方式。你想要的行是:

1,2,3,4

请注意,没有方括号,也没有引号。对于这一行,您的 CSV 解析器可能会返回列表:

['1', '2', '3', '4']

如果您无法更改输入 CSV 的格式,我建议您不要使用 CSV 解析器。

只是强调一下:问题可能在于 CSV 的创建方式,而不是您阅读它的方式。

【讨论】:

    猜你喜欢
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 2012-04-28
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多