【发布时间】:2010-11-01 13:00:21
【问题描述】:
显然,某处的某些 csv 输出实现会从最后一行的右侧截断字段分隔符,并且当字段为空时仅截断文件中的最后一行。
示例输入 csv,字段 'c' 和 'd' 可以为空:
a|b|c|d
1|2||
1|2|3|4
3|4||
2|3
在类似下面的脚本中,我如何判断我是否在最后一行,以便我知道如何适当地处理它?
import csv
reader = csv.reader(open('somefile.csv'), delimiter='|', quotechar=None)
header = reader.next()
for line_num, row in enumerate(reader):
assert len(row) == len(header)
....
【问题讨论】:
-
请注意,您发布的不是 CSV。 CSV 代表“逗号分隔值” - 分隔符必须是逗号。
-
大多数 csv 实现允许您指定一个替代字符作为分隔符
-
唯一接近 CSV 的标准 RFC4180 没有。
-
在 Python 中,根据 docs.python.org/library/csv.html,“分隔符和引用字符不同”——特别是分隔符不一定是逗号,因此 csv 模块也用于读取“非逗号”分隔值,实际上看起来很荒谬(就像,例如,在 Excel 中,“导出到 CSV”可以使用任何分隔符,具体取决于 Windows 区域设置)。
-
如果它让任何人感觉更好,我认为可以肯定地说我必须在这里处理的输入不符合任何体面标准。