如何在Python中使用包含多个元素的列读取CSV

时间:2018-05-30 18:04:46

标签: python csv

我有以下CSV文件:

id;name;duration;predecessors;
10;A;7;;
20;B;10;10;
25;B2;3;10;
30;C;5;10;
40;D;5;20,30, 25;

也就是说,第四列中的最后一行我有三个以逗号分隔的元素(20,30,25)。

我有以下代码:

csv_file = open(path_to_csv, 'r')
csv_file_reader = csv.reader(csv_file, delimiter=',')

first_row = True
for row in csv_file_reader :

    if not first_row:
        print(row)

    else :
        first_row = False

但我得到一个奇怪的输出:

['10;A;7;;']
['20;B;10;10;']
['25;B2;3;10;']
['30;C;5;10;']
['40;D;5;20', '30', ' 25;']

有什么想法吗? 提前致谢

2 个答案:

答案 0 :(得分:2)

您在说明中指定了CSV,代表 C omma S eparated V 等。但是,您的数据使用分号。

考虑将分隔符指定为CSV库的;

with open(path_to_csv, 'r') as csv_file:
    csv_file_reader = csv.reader(csv_file, delimiter=';')

    ...

当我们在这里时,请注意使用with语句打开文件的更改。 with语句允许您以语言稳健的方式打开文件。无论发生什么(异常,退出等),Python都会保证文件将被关闭并且所有资源都会被占用。您不需要关闭文件,只需退出块(unindent)。它是“Pythonic”并且是一个很好的习惯。

答案 1 :(得分:0)

@Antonio ,我很欣赏上述答案。我们知道CSV是一个逗号分隔值的文件,默认情况下Python的 csv 模块基于此工作。

✓没问题,您仍然可以在不使用 csv 模块的情况下阅读它。

✓根据您在问题中提供的输入,我编写了另一个简单的解决方案,而不使用任何Python模块来读取CSV(对于简单的任务来说没问题)。

  

如果您对代码不满意或者某些测试用例失败,请阅读,尝试评论。我会修改并使其可行。

»Data.csv

id;name;duration;predecessors;
10;A;7;;
20;B;10;10;
25;B2;3;10;
30;C;5;10;
40;D;5;20,30, 25;

现在,看看下面的代码(找到并打印第4列有多个元素的所有行):

with open ("Data.csv") as csv_file:
    for line in csv_file.readlines()[1:]:
        arr = line.strip().split(";")
        if len(arr[3].split(",") )> 1:
            print(line) # 40;D;5;20,30, 25;