获取csv文件行终止符

时间:2018-03-13 17:50:44

标签: python string-formatting dialect

在python脚本中,我需要检测不同csv文件的endline终结符。这些终端终结符可以是:' \ r' (mac),' \ r \ n' (窗口),' \ 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

1 个答案:

答案 0 :(得分:1)

您不能使用csv模块以这种方式自动检测线路终结器。您正在使用的Sniffer旨在猜测CSV方言,以供csv.Reader使用。但是,正如the docs saycsv.Reader实际上忽略了lineterminator并且可以互换地处理行结尾,因此Sniffer没有任何理由设置它。

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

next(file)
file.newlines

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