#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