【问题标题】:Import a csv file to a list of lists [duplicate]将 csv 文件导入列表列表 [重复]
【发布时间】:2018-12-15 05:50:08
【问题描述】:

我使用 csv 模块中的 writerow 函数创建了 this csv 文件。该文件有 63 行。我想从此文件中创建一个 python 列表列表。

我尝试了以下代码:

import csv

dataset = []

def importCsv(file):
    x = 0
    print(dataset)
    with open(file, newline='') as csvfile:
        data = csv.reader(csvfile, delimiter=',', quotechar='|')
        for row in data:
            #print(type(row))
            dataset.append(row)
            x += 1
        print(x)

importCsv(csvPath)

但是当我尝试print(len(dataset)) 时,它输出的是 126 而不是 63。我真的很困惑。为什么数据集中的项目数这么多?

【问题讨论】:

  • CSV文件内容的例子应该很有用
  • 尝试在 for 循环中打印 row 以查看添加到 dataset 的内容
  • 126 = 63*2。确保您的文件没有虚假的 CR(回车)字符(臭名昭著的 windows CSV 写入错误),它在每一行之后都会产生一个空行。
  • if open(file, "w",newline='') (newline it is): 如果省略了换行符,则windows会出现bug:每行后有多余的空行
  • 问题出在输入文件上。使用十六进制编辑器检查并确保行尾不是\r\r\n 而不是\n\r\n

标签: python arrays python-3.x list csv


【解决方案1】:

问题主要是由于虚假的 CarriageReturn \r 字符,导致出现一些空行。您可以通过添加显式检查来跳过空行

    for row in data:
        if row:
            dataset.append(row)
            x += 1

【讨论】:

  • row 不是字符串,而是列表。问题出在输入文件中。
  • @Jean-FrançoisFabre。你是对的......我已经更新了答案
猜你喜欢
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 2016-07-25
  • 2023-03-17
  • 1970-01-01
  • 2017-07-28
  • 2019-03-29
  • 2019-06-22
相关资源
最近更新 更多