Запуск метода replace() в цикле for?

#python #string #formatting #replace

#python #строка #форматирование #заменить

Вопрос:

Уже поздно, и я пытаюсь работать над простым скриптом для переименования данных облака точек в рабочий формат. Я не знаю, что я делаю не так, поскольку код внизу работает нормально. Почему код в цикле for не работает? Он добавляет его в список, но он просто не форматируется функцией replace . Извините, я знаю, что это не отладчик, но я действительно застрял на этом, и, вероятно, кому-то другому потребуется 2 секунды, чтобы увидеть проблему.

 # Opening and Loading the text file then sticking its lines into a list []
filename = "/Users/sacredgeometry/Desktop/data.txt"
text = open(filename, 'r')
lines = text.readlines()
linesNew = []
temp = None


# This bloody for loop is the problem
for i in lines:
    temp = str(i)
    temp.replace(' ', ', ',2)
    linesNew.append(temp)


# DEBUGGING THE CODE    
print(linesNew[0])
print(linesNew[1])

# Another test to check that the replace works ... It does!
test2 = linesNew[0].replace(' ', ', ',2)
test2 = test2.replace('t', ', ')
print('Proof of Concept: '   'n'   test2)


text.close()
  

Ответ №1:

Вы не присваиваете возвращаемое значение replace() чему-либо. Кроме того, readlines и str(i) не нужны.

Попробуйте это:

 filename = "/Users/sacredgeometry/Desktop/data.txt"
text = open(filename, 'r')
linesNew = []

for line in text:
    # i is already a string, no need to str it
    # temp = str(i)

    # also, just append the result of the replace to linesNew:
    linesNew.append(line.replace(' ', ', ', 2))

# DEBUGGING THE CODE    
print(linesNew[0])
print(linesNew[1])

# Another test to check that the replace works ... It does!
test2 = linesNew[0].replace(' ', ', ',2)
test2 = test2.replace('t', ', ')
print('Proof of Concept: '   'n'   test2)  

text.close()
  

Ответ №2:

Строки неизменяемы. replace возвращает новую строку, которую вам нужно вставить в linesNew список.

 # This bloody for loop is the problem
for i in lines:
    temp = str(i)
    temp2 = temp.replace(' ', ', ',2)
    linesNew.append(temp2)
  

Ответ №3:

У меня была похожая проблема, и я придумал приведенный ниже код, чтобы помочь ее решить. Моя конкретная проблема заключалась в том, что мне нужно поменять местами определенные части строки с соответствующей меткой. Я также хотел что-то, что можно было бы повторно использовать в разных местах моего приложения.

С помощью приведенного ниже кода я могу сделать следующее:

 >>> string = "Let's take a trip to Paris next January"
>>> lod = [{'city':'Paris'}, {'month':'January'}]
>>> processed = TextLabeler(string, lod)
>>> processed.text
>>> Let's take a trip to [[ city ]] next [[ month ]]
  

Вот весь код:

 class TextLabeler():
    def __init__(self, text, lod):
        self.text = text
        self.iterate(lod)

    def replace_kv(self, _dict):
        """Replace any occurrence of a value with the key"""

        for key, value in _dict.iteritems():
            label = """[[ {0} ]]""".format(key)
            self.text = self.text.replace(value, label)
            return self.text

    def iterate(self, lod):
        """Iterate over each dict object in a given list of dicts, `lod` """

        for _dict in lod:
            self.text = self.replace_kv(_dict)
        return self.text