获取 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 say,csv.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 开始被弃用并且可能有一天会成为一个错误。
在一个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 say,csv.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 开始被弃用并且可能有一天会成为一个错误。