Error in python replace. (AttributeError: ‘tuple’ object has no attribute ‘replace’)
You have a tuple (a sort of list) of numbers, and you want to make that a string. You can’t replace the brackets, they aren’t a part of the variable, they are just a part of its representation.
Instead you should use join() and str()
result = " ".join(str(x) for x in randy)
However, this probably will not give the right result either, as it is a nested list of tuples. You probably mean: randy = randy + (rand,) instead if randy = randy,rand .
Solution 2
This notation creates a tuple of two elements, tuples do not have a method called replace .
If you just want to concatenate the numbers into a list representation separated by commas, you could do this in your loop:
Then you remove the replace lines, and instead do this
to get a string that has the values separated by commas.
You should maybe add the output that you would like to get to your question, because at the moment it’s not quite clear what you want to do exactly.
Solution 3
exam_st_date = (11, 12, 2014) # Sample Output : The examination will start from : 11 / 12 / 2014 newtup = str(exam_st_date).replace(',', ' /') print(newtup)
look at mine example should give you some results
avitex
Comments
Environment
I am using Python 3 and my OS is Windows 7. I understand that some commands have changed from the transition from python 2.7 to 3 (What I have used).
Problem
randy = randy.replace(")", "") randy = randy.replace("(", "") randy = randy.replace(" ", "")
Traceback (most recent call last): File "", line 248, in run_nodebug File "Criptic.py", line 134, in randy = randy.replace(")", "") AttributeError: 'tuple' object has no attribute 'replace'
Edit:
#Import string import string import random #Input user data text = input("Enter your text to be converted: ") #Test Print print("-------------------------") print("Your text is: ",text) #Break up all the data data = list(text) #Lowercase count = text.count("a") count1 = text.count("b") count2 = text.count("c") count3 = text.count("d") count4 = text.count("e") count5 = text.count("f") count6 = text.count("g") count7 = text.count("h") count8 = text.count("i") count9 = text.count("j") count10 = text.count("k") count11 = text.count("l") count12 = text.count("m") count13 = text.count("n") count14 = text.count("o") count15 = text.count("p") count16 = text.count("q") count17 = text.count("r") count18 = text.count("s") count19 = text.count("t") count20 = text.count("u") count21 = text.count("v") count22 = text.count("w") count23 = text.count("x") count24 = text.count("y") count25 = text.count("z") count26 = text.count("A") #Uppercase count27 = text.count("B") count28 = text.count("C") count29 = text.count("D") count30 = text.count("E") count31 = text.count("F") count32 = text.count("G") count33 = text.count("H") count34 = text.count("I") count35 = text.count("J") count36 = text.count("K") count37 = text.count("L") count38 = text.count("M") count39 = text.count("N") count40 = text.count("O") count41 = text.count("P") count42 = text.count("Q") count43 = text.count("R") count44 = text.count("S") count45 = text.count("T") count46 = text.count("U") count47 = text.count("V") count48 = text.count("W") count49 = text.count("X") count50 = text.count("Y") count51 = text.count("Z") #Other Characters count52 = text.count(" ") count53 = text.count("?") count54 = text.count("@") count55 = text.count("(") count56 = text.count(")") count57 = text.count(".") #Numbers count58 = text.count("1") count59 = text.count("2") count60 = text.count("3") count61 = text.count("4") count62 = text.count("5") count63 = text.count("6") count64 = text.count("7") count65 = text.count("8") count66 = text.count("9") count67 = text.count("0") #Counting how many characters in the sentence finalcount = count + count1 + count2 + count3 + count4 + count5 + count6 + count7 + count8 + count9 + count10 + count11 + count12 + count13 + count14 + count15 + count16 + count17 + count18 + count19 + count20 + count21 + count22 + count23 + count24 + count25 + count26 + count27 + count28 + count29 + count31 + count32 + count33 + count34 + count35 + count36 + count37 + count38 + count39 + count40 + count41 + count42 + count43 + count44 + count45 + count46 + count47 + count48 + count49 + count50 + count51 + count52 + count53 + count54 + count55 + count56 + count57 + count58 + count59 + count60 + count61 + count62 + count63 + count64 + count65 + count66 + count67 #Final count of Characters print(" Chars: ",finalcount) print("-------------------------") char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()?_+-=1234567890 " charnum = 74 + 11 list(char) randy = 0 num = 0 while num < finalcount: rand = random.randrange(1,9) randy = randy,rand finalcount = finalcount - 1 if rand == 1: print(text[finalcount],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],",") if rand == 2: print(char[random.randrange(0,charnum)],text[finalcount],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],",") if rand == 3: print(char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],text[finalcount],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],",") if rand == 4: print(char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],text[finalcount],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],",") if rand == 5: print(char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],text[finalcount],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],",") if rand == 6: print(char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],text[finalcount],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],",") if rand == 7: print(char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],text[finalcount],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],",") if rand == 8: print(char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],text[finalcount],char[random.randrange(0,charnum)],",") if rand == 9: print(char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],char[random.randrange(0,charnum)],text[finalcount],",") randy = randy.replace(")", "") randy = randy.replace("(", "") randy = randy.replace(" ", "") print("-------------------------") print(". Completed. ") print("-------------------------") print(randy) print("-This is your code unlock key. Without this code it will not decript. ") print("-------------------------")
У объекта 'tuple' нет атрибута 'replace'
Я прочитал предыдущие сообщения об этой ошибке. Но это мне не помогает. Поэтому я снова обращаю внимание. Код выглядит следующим образом.
import os replacements = for fn in os.walk('/media/ambijat/Dataworld/f23/Dropbox/ttgis'): nn = fn for k, v in replacements.items(): nn = nn.replace(str(k), str(v)) if nn != fn: os.rename(fn, nn)
Это при запуске дает ошибке 'tuple' object has no attribute 'replace' и, кажется, дает ошибку. Я использую dict для замены специальных символов в именах файлов, например, [,&<>*?|\";+:'() ] . Есть ли лучший способ сделать это. Спасибо.
3 ответа
Для каждого каталога в дереве, укорененном в верхней части каталога (включая сам верх), он дает 3-кортеж (dirpath, dirnames, filenames).
Чтобы извлечь только имя файла, используйте индексирование или распаковку последовательности. Любой из них будет работать:
nn = fn[-1] nn = fn[2] _, _, nn = fn
В качестве альтернативы, как указывает @AntonvBR, вы можете использовать распаковку последовательности в определении вашего цикла for iterable:
for _, _, fn in os.walk('/media/ambijat/Dataworld/f23/Dropbox/ttgis'): nn = fn # as before..
Да, тоже хорошо объяснил. Тем не менее, это было бы более питонно, и я знаю, что вы согласитесь изменить эту строку for fn in os.walk('/media/ambijat/Dataworld/f23/Dropbox/ttgis') вместо добавления новой переменной (в _, _, nn) например.
В вашем первом фрагменте кода fn является кортежем, так как os.walk() возвращает кортеж dirpath (string), dirnames (list), filenames (list). Поэтому, назначая его nn , nn становится кортежем и использование nn.replace(k, v) по очереди не будет работать, потому что кортеж не имеет метода replace .
В вашей второй части кода nn теперь равно fn[2] (список dirnames). К сожалению, список также не имеет метода replace . Предполагая, что вы заменяете все : и + в своих именах файлов, вам необходимо пропустить все эти имена файлов:
Другие вещи, которые я наблюдал и изменяли в коде:
- имена файлов, возвращаемые os.walk , не включают полный путь к файлу, что означает, что os.rename может не найти файл, если сценарий не запущен в том же каталоге, что и каталог, который вы переименовываете. Поэтому я включил path во время переименования.
- после os.rename файл в каталоге будет переименован, но имя файла, которое прочитал бы код, все равно будет таким же. Таким образом, вы также должны изменить имя файла в коде.
import os replacements = for fn in os.walk('/media/ambijat/Dataworld/f23/Dropbox/ttgis'): path = fn[0] nn = fn[2] for filename in nn: newname = filename for k, v in replacements.items(): newname = newname.replace(str(k), str(v)) if newname != filename: os.rename(os.path.join(path, filename), os.path.join(path, newname)) filename = newname
Хотя я бы разрезал еще одну строку кода через следующее предложение:
import os replacements = for path, _, filenames in os.walk('/media/ambijat/Dataworld/f23/Dropbox/ttgis'): for filename in filenames: newname = filename for k, v in replacements.items(): newname = newname.replace(k, v) if newname != filename: os.rename(os.path.join(path, filename), os.path.join(path, newname)) filename = newname
выполнение этого при копировании и вставке выдает ошибку как FileNotFoundError: [Errno 2] No such file or directory: .
@ambrishdhaka почему ты не зациклен на fn ? Вы переименовываете только второй файл в списке файлов в отредактированном коде, поэтому второй раз. Но это также заставило меня понять проблему. Я отредактировал свой ответ так, чтобы имя файла также переименовывалось в коде.
Если я точно FileNotFoundError: [Errno 2] No such file or directory: 'SIPRI_military ваш код, я получаю эту ошибку FileNotFoundError: [Errno 2] No such file or directory: 'SIPRI_military .
@ambrishdhaka Я думаю, что вижу проблему. Извините, я совсем новичок в питоне. Я отредактирую это очень быстро
@ambrishdhaka сделано. На этот раз я проверил это (я действительно должен был проверить это прежде, извините), и это работает на моем местном.
Причина, по которой вы видите странное поведение, заключается в том, что имя файла переименовывается, а не строка имени файла в коде. Вот почему я вставил filename = newname в одном из моих предыдущих изменений.
Проблема заключается в линии
os.walk возвращает последовательность кортежей в форме (dirpath, dirnames, filenames) соответствии с документами Python. Таким образом, вы пытаетесь вызвать метод .replace() на кортеже, что дает вам сообщение об ошибке, потому что класс tuple не имеет такого метода. Я предполагаю, что вы хотели использовать метод str.replace() .
Вот какой код, который должен работать (проверен на некоторых каталогах, которые я сделал для этой цели на моей машине):
import os replacements = for directory in os.walk('/media/ambijat/Dataworld/f23/Dropbox/ttgis'): filenames = directory[-1] for k, v in replacements.items(): for filename in filenames: newname = filename.replace(k, v) if newname != filename: os.rename(directory[0]+'\\'+filename, directory[0]+'\\'+newname)
Я могу ощутить лишь некоторую часть вашего объяснения, но как попасть в код просто от меня очень далеко. Был бы благодарен вам, если бы вы могли заменить некоторые строки кода.
@ambrishdhaka Я добавил больше подробностей в свой ответ сейчас, надеюсь, это полезно. Также я бы рекомендовал сослаться на ответ выше, который предлагает альтернативные решения.
Я применил модификации, как написано выше. Теперь replace список вместо кортежа. Ошибка остается прежней.
Ещё вопросы
- 0 Триггер базы данных MySQL не работает должным образом
- 1 Генерация QR-кода с цветами в каждом пикселе изображения и двоичного значения
- 0 GitLab CI: мое тестовое задание не принимает контейнер mysql
- 0 векторная позиция c ++ установлена в 1 вместо 0
- 0 обработка флажков в openWindow
- 0 Реализация jquery mmenu не видна в представлении вообще
- 0 сохранение значения с помощью атрибута span в html
- 0 заменить звездочку innerhtml javascript
- 0 получать события из базы данных и размещения в режиме просмотра календаря (Android)
- 0 Последовательность H2 генерирует отрицательный номер в столбце [JPA Spring]
- 1 Python argparse, как передать False из командной строки?
- 0 Как можно передать идентификатор с одного маршрутизатора на другой в Node.js
- 1 Визуализация компонента с помощью concat helper
- 1 Почему каждое исключение является системным исключением?
- 0 MySQL вопрос проблема с PHP
- 1 Потоки для медленных операций в приложении MVC
- 1 React Native Scroll View не показывает изображение
- 0 Я не могу сгенерировать автоинкрементный Id, а hibernate всегда генерирует 1 как Id
- 0 Невозможно скомпилировать программу с twitcurl
- 1 Угадай секретный номер Java
- 1 Как вызвать исходную функцию JavaScript, которая сначала была переопределена расширением?
- 1 Как конфертировать из ICollection в IEnumerable?
- 1 Кодирование каждый раз производит разные хэши
- 1 Захват функций с помощью регулярных выражений
- 0 jquery удалить содержимое последнего тд
- 0 Mysql Connot добавить ограничение внешнего ключа. как я могу решить это?
- 1 Asp.Net C # MVC Динамические формы (изменение структуры Dom и получение данных на сервер)
- 1 Добавить сетку в список
- 1 Как я могу пройти и сократить объект?
- 0 Qt ActiveX извлекает количество страниц в текстовом документе
- 0 codeigniter получить количество num_rows
- 0 ASP.NET MVC4 проверка подлинности телефонного промежутка
- 1 регулярное выражение, отфильтровывающее 'N', за которым следует любая комбинация цифр
- 0 Динамический метатег с angularJS
- 1 Есть ли разница между клиентом MDI, контейнером MDI и родителем MDI?
- 0 Windows-сокеты accept () возвращают неверное значение
- 0 NULL прекращено c_str ()?
- 0 mysqli_query не работает в php
- 1 Строка соединения Entity Framework для удаленного сервера
- 0 CSS-стиль не отображается в браузере
- 1 Java BufferedReader FileReader проблема
- 0 Невозможно обновить значение индекса `$ scope` из клика DOM
- 0 Как получить атрибут id текстовой области, который заменен редактором TinyMCE
- 1 Добавление JScrollPane в JPanel без менеджера макетов
- 0 Booleans не работает правильно
- 1 Форматирование значений с плавающей запятой в Java [дубликаты]
- 0 Почему нельзя удалить кэш изображений в Magento 1.7.0.2
- 0 Как получить значение из запроса MySQL вне оператора запроса?
- 1 Временно скрыть элемент из Combobox