Замена окончаний строк условно в python 2.7.15 - PullRequest
0 голосов
/ 29 июня 2018

У меня есть некоторые SVN-патчи, которые, к сожалению, имеют смешанные окончания строк. Мой Windows SVN-клиент (черепаха) сохраняет свои метаданные с окончаниями строк CRLF. Тем не менее, мои коллеги используют Cornerstone на MacOS для применения исправлений, которым нужны метаданные для окончания LF-строк. Я не могу массово изменить все окончания строк в файле (работая над этим с управлением). Мне нужно изменить окончания строк только метаданных.

Я могу обнаружить окончания строк CRLF в моем файле исправления просто отлично, но попытка заменить их на LF не работает. Кто-нибудь может помочь? Если есть более эффективный способ сделать это, пожалуйста, дайте мне знать.

Я использую Python 2.7.15

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()

1 Ответ

0 голосов
/ 29 июня 2018

replace метод не обновляет объект, из которого он был вызван, а просто возвращает замененную строку в качестве возвращаемого значения, поэтому вам необходимо присвоить возвращаемое значение обратно переменной, чтобы обновить ее.

Изменить эту строку:

line.replace(CRLF, LF)

до:

line = line.replace(CRLF, LF)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...