python中newline参数和lineterminator参数的区别和用途是什么

时间:2017-11-04 23:56:48

标签: python-3.x csv functional-programming arguments file-handling

当我在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

1 个答案:

答案 0 :(得分:0)

正如csv documentation所说:

  

<强> Dialect.lineterminator
  用于终止writer生成的行的字符串。它默认为'\r\n'

     

注意:阅读器采用硬编码,可将'\r''\n'识别为行尾,并忽略lineterminator。这种行为将来可能会改变。

它指定用于写入CSV的每一行结尾的字符。 Linux文件通常只有换行符(\n),Windows文件通常有回车加换行符(\r\n)。

由于csv模块会写入自己的行结尾,因此必须使用reader打开为writernewline=''打开的文件。文档中也对此进行了解释,该文档还有以下脚注:

  

<强>脚注

     

[1]如果未指定newline='',则引用字段中嵌入的换行符将无法正确解释,并且在写入时使用\r\n换行符的平台上将添加额外的\r 。指定newline=''应始终是安全的,因为csv模块会执行自己的(通用)换行处理。

open()文档中:

  

newline控制通用换行模式的工作方式(仅适用于文本模式)。它可以是None'''\n''\r''\r\n'。它的工作原理如下:

     
      
  • 从流中读取输入时,如果newlineNone,则启用通用换行模式。输入中的行可以'\n''\r''\r\n'结尾,并在返回给调用者之前将其转换为'\n'。如果是'',则启用通用换行模式,但行结尾将返回给未调用的调用者。如果它具有任何其他合法值,则输入行仅由给定字符串终止,并且行结尾将返回给未翻译的调用者。

  •   
  • 将输出写入流时,如果newlineNone,则写入的任何'\n'个字符都将转换为系统默认行分隔符os.linesep。如果换行符为'''\n',则不会进行翻译。如果换行符是任何其他合法值,则写入的任何'\n'个字符都将转换为给定的字符串。

  •