当我在CSV编写器对象中遇到 lineterminator dialect 时,我正在使用CSV文件对象...
首先,它的目的是什么?我不完全理解它的作用,或者当它没有被使用时会发生什么。
其次,在获取文件对象(而不是CSV编写器对象)时,我遇到了一些使用换行参数的示例。它的目的或用途是什么?它与lineterminator参数有什么不同?
我有两个代码片段使用下面这些参数中的任何一个,并且两者的工作方式完全相同。我不完全理解python docs关于方言和这两个论点的内容。希望有人可以提供帮助。
注意:没有使用任何参数时的区别仅在于写入文件时(这是文件处理函数的一部分)。代码显示读取位,为错误道歉
使用lineterminator参数:
# Handles reading and modifying CSV files
def FileHandler(targetFile, mode, data=[]):
content = []
with open(targetFile, mode) as file:
file_reader = csv.reader(file, lineterminator="\n")
for line in file_reader:
content.append(line)
num_of_lines = len(content)
file.close()
return content, num_of_lines
使用换行参数:
# Handles reading and modifying CSV files
def FileHandler(targetFile, mode, data=[]):
content = []
with open(targetFile, mode, newline="\n") as file:
file_reader = csv.reader(file)
for line in file_reader:
content.append(line)
num_of_lines = len(content)
file.close()
return content, num_of_lines
答案 0 :(得分:0)
正如csv documentation所说:
<强> Dialect.lineterminator 强>
用于终止writer生成的行的字符串。它默认为'\r\n'
。注意:阅读器采用硬编码,可将
'\r'
或'\n'
识别为行尾,并忽略lineterminator
。这种行为将来可能会改变。
它指定用于写入CSV的每一行结尾的字符。 Linux文件通常只有换行符(\n
),Windows文件通常有回车加换行符(\r\n
)。
由于csv
模块会写入自己的行结尾,因此必须使用reader
打开为writer
和newline=''
打开的文件。文档中也对此进行了解释,该文档还有以下脚注:
<强>脚注强>
[1]如果未指定
newline=''
,则引用字段中嵌入的换行符将无法正确解释,并且在写入时使用\r\n
换行符的平台上将添加额外的\r
。指定newline=''
应始终是安全的,因为csv模块会执行自己的(通用)换行处理。
在open()文档中:
newline
控制通用换行模式的工作方式(仅适用于文本模式)。它可以是None
,''
,'\n'
,'\r'
和'\r\n'
。它的工作原理如下:
从流中读取输入时,如果
newline
为None
,则启用通用换行模式。输入中的行可以'\n'
,'\r'
或'\r\n'
结尾,并在返回给调用者之前将其转换为'\n'
。如果是''
,则启用通用换行模式,但行结尾将返回给未调用的调用者。如果它具有任何其他合法值,则输入行仅由给定字符串终止,并且行结尾将返回给未翻译的调用者。将输出写入流时,如果
newline
为None
,则写入的任何'\n'
个字符都将转换为系统默认行分隔符os.linesep
。如果换行符为''
或'\n'
,则不会进行翻译。如果换行符是任何其他合法值,则写入的任何'\n'
个字符都将转换为给定的字符串。