python fileinput行结尾

时间:2014-11-23 19:58:55

标签: python newline

我有一些python代码,它们的行结尾都是错误的:

command = 'svn cat -r {} "{}{}"'.format(svn_revision, svn_repo, svn_filename)
content = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE).stdout.read()

written = False
for line in fileinput.input(out_filename, inplace=1):
        if line.startswith("INPUT_TAG") and not written:
            print content
            written = True
        print line,

这将获取名为svn_filename的文件的副本,并将该内容插入另一个名为out_filename的文件中,该文件位于" INPUT_TAG"文件中的位置。

问题是out_filename中的行结尾。 它们意味着\ r \ n但是我插入的块是\ r \ n \ n \ n \ n

将print语句更改为:

print content,  # just removes the newlines after the content block

print content.replace('\r\r','\r')  # no change

无效。在内容离开我的代码后插入额外的回车符。似乎某事正在决定,因为我在Windows上它应该将所有\ n转换为\ r \ n。

我怎样才能解决这个问题?

2 个答案:

答案 0 :(得分:0)

CRLF =回车换行。

  

Windows上的Python区分了文本和二进制文件;   文本文件中的行尾字符会自动更改   稍微读取或写入数据时。

https://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files

您可以输出二进制文件而不是文本文件吗?

如果你在字符串前面添加r到open the file as raw,这是否会阻止输出中的额外\ _?

答案 1 :(得分:0)

我可以解决"通过执行以下操作来解决此问题:

content = content.replace('\r\n', '\n')

将换行符转换为unix样式,这样当内部魔术再次转换它时,它就会变得正确。

虽然这不是正确的/最好的/ pythonic方式....