Python file.write创建额外的回车

Chr*_*ris 14 python windows eol

我正在使用python将一系列SQL语句写入文件.模板字符串如下所示:

store_insert = '\tinsert stores (storenum, ...) values (\'%s\', ...)'
Run Code Online (Sandbox Code Playgroud)

我正在写这样的文件:

for line in source:
    line = line.rstrip()
    fields = line.split('\t')
    script.write(store_insert % tuple(fields))
    script.write(os.linesep)
Run Code Online (Sandbox Code Playgroud)

但是,在结果输出中,我看到\ r \n\r \n在每一行的末尾,而不是我期望的\ r \n.为什么?

adw*_*adw 29

\n转换os.linesep为在文本模式下打开的文件.因此,当您os.linesep在Windows上写入文本模式文件时,您会编写\r\n,并且\n转换得到\r\r\n.

另见文档:

在编写以文本模式打开的文件时,不要将os.linesep用作行终止符(默认值); 在所有平台上使用单个'\n'代替.


Dan*_*lla 9

使用Python 3

open()引入了新参数newline,该参数允许指定任何\n将被转换为的字符串.

传递空字符串参数newline=''会禁用转换,保留新行char.仅适用于文本模式.

从文档中

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

  • 有关用例和一些详细说明,请参阅[此处](http://stackoverflow.com/questions/43528959/python-3-how-to-pass-binary-file-as-text-without- saving-first) (3认同)

Mar*_*som 7

文本文件在不同的操作系统上具有不同的行结束符,但使用具有一致的行结束符的字符串很方便。Python 继承了 C 的约定,'\n'即用作通用行结束字符,并在必要时依赖文件读写函数进行转换。如果文件以默认text模式打开,则读取和写入函数知道执行此操作。如果b在打开文件时将字符添加到模式字符串中,则会跳过此翻译。