获取 csv 文件行终止符

Get csv file line terminator

在一个python脚本中,我需要检测不同csv文件的结束符。这些结束符可以是:'\r' (mac)、'\r\n' (windows)、'\n' (unix).

我试过:

dialecto = csv.Sniffer().sniff(csvfile.read(2048), delimiters=",;")
dialecto.lineterminator

但是不行。

我该怎么做?

编辑:

基于 abarnert 响应:

def getLineterminator(file):
    with open(file, 'rU') as csvfile:
        csvfile.next()
    return csvfile.newlines

您不能以这种方式将 csv 模块用于 auto-detect 行终止符。您使用的 Sniffer 旨在猜测 csv.Reader 使用的 CSV 方言。但是,由于 the docs saycsv.Reader 实际上会忽略 lineterminator 并交替处理行尾,因此 Sniffer 没有任何理由设置它。


但实际上,具有 XXX 行终止符的 CSV 文件只是具有 XXX 行终止符的文本文件。它是 CSV 的事实无关紧要。只需 open 文本模式下的文件,从中读取一行,并检查其 newlines 属性:

next(file)
file.newlines

在Python3中,只要你在文本模式下打开文件(不要在模式下使用'b'),这就可以了。在 Python 2.x 中,您可能需要指定通用换行模式(不要使用 'b',并且 do 使用 'U').如果你正在为两个版本编写代码,你可以使用通用换行模式,它只会在 3.x 中被忽略——但除非你需要它,否则不要这样做,因为它从 3.6 开始被弃用并且可能有一天会成为一个错误。