首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python 2.7.15中有条件地替换行尾

在python 2.7.15中有条件地替换行尾
EN

Stack Overflow用户
提问于 2018-06-30 04:26:56
回答 1查看 227关注 0票数 0

我有一些svn补丁,不幸的是它们有混合的行尾。我的Windows svn客户端(tortoise)使用CRLF行结束符存储元数据。然而,我的同事们使用MacOS上的基石来应用补丁,这些补丁需要元数据具有LF行结尾。我不能批量更改文件中的所有行尾(与管理层一起处理)。我只需要更改元数据的行尾。

我能够在我的补丁文件中检测到CRLF行结尾,但是尝试用LF替换它们是行不通的。有人能帮上忙吗?如果有更有效的方法,请让我知道。

我使用的是python 2.7.15

代码语言:javascript
复制
import sys
import os

CRLF = '\r\n'
LF = '\n'

filePath = sys.argv[1] 
newFilePath = filePath.replace('.patch', '-converted.patch')

newFile = open(newFilePath,'wb')
oldFile = open(filePath, 'r+b')

for idx,line in enumerate(oldFile.readlines()):
        line = str(line)
        if line.startswith("=====") or line.startswith("@@") or line.startswith("+++") or line.startswith("---") or line.startswith("Index:"):
                if line.endswith(CRLF):
                        print ("detected CRLF at line " + str(idx))
                        line.replace(CRLF, LF)
                        print ("converted line ending to LF at line " + str(idx))
                        if line.endswith(CRLF):
                                print("hmm... line " + str(idx) + " still a crlf line!!!!!!!!")
        newFile.writelines(line)

oldFile.close()
newFile.close()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-30 04:33:33

replace方法不会更新从中调用它的对象,而只是将替换的字符串作为返回值返回,因此您需要将返回值分配回变量以更新它。

更改此行:

代码语言:javascript
复制
line.replace(CRLF, LF)

至:

代码语言:javascript
复制
line = line.replace(CRLF, LF)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51108969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档