【问题标题】:Formatting csv files [duplicate]格式化csv文件[重复]
【发布时间】:2017-04-19 05:19:26
【问题描述】:

我目前正在尝试将 csv 文件中的数字列表作为元组导入,如下所示:

[(60, 20), (100, 55), (50, 40), (20, 70), (95, 85)])

def tuples(filename):
    import csv
    with open(filename) as csvfile:
        rdr = csv.reader(csvfile)
        next(rdr, None) 
        my_list = [tuple(filter(None, row)) for row in rdr]
        print(my_list)

tuples("tuple.csv")

但是目前我的输出是: [('60', '20'), ('100', '55'), ('50', '40'), ('20', '70', ' '), ('95', ' 85')]

如何格式化我的代码以摆脱引号和空字段。 任何帮助将不胜感激。

【问题讨论】:

  • 你不想“去掉引号”,你想将字符串转换为整数......
  • 对不起,措辞不好,我该怎么做?

标签: python


【解决方案1】:

使用列表推导(更简洁,但对于初学者来说更难理解),遍历所有值并将每个元素转换为整数(如果存在)

my_list = [('60', '20'), ('100', '55'), ('50', '40'), ('20', '70', ' '), ('95', '85')]
my_formatted_list = [tuple(int(value) for value in _tuple if value.strip()) for _tuple in my_list]

【讨论】:

  • 所以我应该用这个变量替换 my_list 吗?
  • 谢谢,但是我必须手动输入元组列表并将它们分配给变量_list吗?
  • 顺便说一句,只是好奇
  • 打印前加上就行了
  • 我的意思是我可以从我的 csv 文件中导入这些值,而不是输入它们并将它们分配给 my_list 吗?
【解决方案2】:

您可以将list comprehensionmap() 一起使用,如下所示:

my_list = [('60', '20'), ('100', '55'), ('50', '40'), ('20', '70', ' '), ('95', '85')]
[tuple(map(int, item[:2])) for item in my_list]
# Output: [(60, 20), (100, 55), (50, 40), (20, 70), (95, 85)]

说明:

map(int, item[:2]),map()用于将函数int()应用于item[:2]的每个元素。

item[:2],仅使用 my_list 中每个 tuple 的前 2 个元素。

【讨论】:

    【解决方案3】:

    如果您希望将这些值放在整数列表中,您可以这样做

    intlist = []
    for i in my_list:
        intlist += int (i)
    print (intlist)
    

    这将输出 [(60, 20), (100, 55), (50, 40), (20, 70), (95, 85)])

    如果你想单独输出值,你可以像这样循环遍历你的列表

    for i in my_list:
        print (int (i))
    

    如果你想在一行上试试类似的东西

    line = ""
    for i in my_list:
        line += i
    print (line)
    

    【讨论】:

    • 这会做什么?
    • 您到底想对导入的值做什么?
    • 它将遍历列表,将所有内容转换为整数并将其添加到新列表中。
    猜你喜欢
    • 2020-10-28
    • 2015-12-07
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多