我有一些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。
我怎样才能解决这个问题?
答案 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方式....