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

如何在Python中读取包含多个元素的列的CSV,python,csv,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

我有以下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;']
有什么想法吗?
提前感谢

您在描述中指定了CSV,它表示CommaS分离V值。但是,您的数据使用分号

考虑将分隔符指定为
用于CSV库:

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

    ...

在这里,请注意使用
with
语句打开文件的更改。
with
语句允许您以语言健壮的方式打开文件。无论发生什么情况(异常、退出等),Python都保证关闭文件并计算所有资源。您不需要关闭文件,只需退出块(取消登录)。这是一种“Pythonic”和养成的好习惯。

您在描述中指定了CSV,它代表Commas分离V值。但是,您的数据使用分号

考虑将分隔符指定为
用于CSV库:

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

    ...

在这里,请注意使用
with
语句打开文件的更改。
with
语句允许您以语言健壮的方式打开文件。无论发生什么情况(异常、退出等),Python都保证关闭文件并计算所有资源。您不需要关闭文件,只需退出块(取消登录)。这是一种“Pythonic”,是一种很好的习惯。

@Antonio,我很感激上面的回答。正如我们所知,CSV是一个带有逗号分隔值的文件,Python的CSV模块默认基于此工作

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

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

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

»Data.csv 现在,看一下下面的代码(它查找并打印第4列包含多个元素的所有行):


@Antonio,我很感激上面的回答。正如我们所知,CSV是一个带有逗号分隔值的文件,Python的CSV模块默认基于此工作

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

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

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

»Data.csv 现在,看一下下面的代码(它查找并打印第4列包含多个元素的所有行):


您的文件使用
作为分隔符,而不是
顺便说一句,如果在循环内部进行测试,则不需要
。相反,将其放在循环之前以跳过第一行:
next(csv\u file\u reader)
您的文件使用
作为分隔符,而不是
顺便说一句,如果在循环内部进行测试,则不需要
。相反,将其放在循环之前以跳过第一行:
next(csv\u文件\u读取器)
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;