我有以下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;']
有什么想法吗? 提前致谢
答案 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(对于简单的任务来说没问题)。
如果您对代码不满意或者某些测试用例失败,请阅读,尝试和评论。我会修改并使其可行。
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;