Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Python для новичков
  • » Вывод текста с символом перенос строки "\n" из базы MySQL в поле Text не хочет работать правильно [RSS Feed]

#1 Июль 26, 2022 09:56:35

m1r42
Зарегистрирован: 2022-07-26
Сообщения: 73
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод текста с символом перенос строки "\n" из базы MySQL в поле Text не хочет работать правильно

Всем добра, уважаемые!
Делаю простую программу, которая будет принимать текст, записывать в базу MySQL, а затем считывать и выводить на печать.
Проблема нашлась там где я не ждал.
При чтении из базы и только (если вывести, например, строковую переменную только что созданную, то проблемы не будет), так вот, при чтении из базы и выводе этого текста в поле Text вот таким вот образом:
Чтение из базы:

 sql="SELECT `somefield` FROM `somebase` WHERE `nom` = '"+nom+"';"
                cursor.execute(sql)
                answer = cursor.fetchall()
                KakoyToTextIzBazy = str(answer)[13:len(str(answer))-3]

Вывод в поле Text:
     Pole = Text(root,width=50,height=10,wrap=WORD)
    Pole.pack()
    Pole.insert(0.0,KakoyToTextIzBazy)

получаю в этом поле следующее: “Какие-то цифры\nКакие-то буквы\n”. При этом не срабатывает перенос строки, все выводится в поле Text включая знак \n

Но, если я просто присвою переменной KakoyToTextIzBazy любую строку типа str с переносом в виде “\n”, например:
 KakoyToTextIzBazy = 'Какие то цифры\nКакие то буквы\n'
то в поле выводится этот текст с учетом переносов строки.

Отредактировано m1r42 (Июль 26, 2022 10:06:23)

Офлайн

#2 Июль 26, 2022 10:54:28

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2091
Репутация: +  59  -
Профиль   Отправить e-mail  

Вывод текста с символом перенос строки "\n" из базы MySQL в поле Text не хочет работать правильно

print(type(answer), answer)



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Июль 26, 2022 11:03:02

m1r42
Зарегистрирован: 2022-07-26
Сообщения: 73
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод текста с символом перенос строки "\n" из базы MySQL в поле Text не хочет работать правильно

Все решилось банально, попробовал заменять символы перебором \,n и в итоге каким-то чудом нащупал, что у меня два бэкслэша перед “n”

 KakoyToTextIzBazy = KakoyToTextIzBazy.replace("\\n","\n")
, но беда в том, что я не могу понять откуда появился еще один бэкслэш в тексте. при выводе через Print этого символа нет.
Загадка однако.

Офлайн

#4 Июль 26, 2022 11:04:53

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2091
Репутация: +  59  -
Профиль   Отправить e-mail  

Вывод текста с символом перенос строки "\n" из базы MySQL в поле Text не хочет работать правильно

чото за экранирование символов слышали?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#5 Июль 26, 2022 11:13:12

m1r42
Зарегистрирован: 2022-07-26
Сообщения: 73
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод текста с символом перенос строки "\n" из базы MySQL в поле Text не хочет работать правильно

нет, потому и здесь

Офлайн

#6 Июль 26, 2022 11:20:05

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2091
Репутация: +  59  -
Профиль   Отправить e-mail  

Вывод текста с символом перенос строки "\n" из базы MySQL в поле Text не хочет работать правильно

m1r42
нет, потому и здесь
а должны быть где-то тут
https://pyprog.pro/python/py/str/esqape_sec.html



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#7 Июль 26, 2022 11:37:58

m1r42
Зарегистрирован: 2022-07-26
Сообщения: 73
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод текста с символом перенос строки "\n" из базы MySQL в поле Text не хочет работать правильно

Это я уже понял. Не могу понять в какой момент добавляется этот бэкслэш. Или он вообще не добавляется, а я просто меняю \n на \n в этом коде:

 KakoyToTextIzBazy = KakoyToTextIzBazy.replace("\\n","\n")

экранируя при этом бэкслэш перед n в моем же коде. Но если я меняю перенос строки на перенос строки, то почему все начинает работать? Строка начинает переноситься. Запутался я совсем. Или уже перестать грузиться этим и принять как должное.

Отредактировано m1r42 (Июль 26, 2022 11:39:13)

Офлайн

#8 Июль 26, 2022 12:01:32

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2091
Репутация: +  59  -
Профиль   Отправить e-mail  

Вывод текста с символом перенос строки "\n" из базы MySQL в поле Text не хочет работать правильно

cursor.fetchall() fetches all the rows of a query result. It returns all the rows as a list of tuples. An empty list is returned if there is no record to fetch.

https://pyneng.readthedocs.io/ru/latest/book/25_db/sqlite3_fetch.html

Осознайте какой тип и в каком виде вам курсор возвращает значение

иначе будете на этом холме тупить вечно



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#9 Июль 26, 2022 12:40:47

m1r42
Зарегистрирован: 2022-07-26
Сообщения: 73
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод текста с символом перенос строки "\n" из базы MySQL в поле Text не хочет работать правильно

Вот вам кусок кода:

                 sql8="SELECT `neispr` FROM `kvt` WHERE `nom` = '"+nom+"';"
                cursor.execute(sql8)
                answer2 = cursor.fetchall()
                print(answer2)
                neispr = str(answer2)[13:len(str(answer2))-3]
                print(neispr,type(neispr))
                neispr = neispr.replace("\\n","\n")
                print(neispr,type(neispr))

Вот результат работы:

[{'neispr': ‘Специально проверяю. Как это работает.\nСледующая строка.\nТретья строка.’}[
Специально проверяю. Как это работает.\nСледующая строка.\nТретья строка. <class ‘str’>
Специально проверяю. Как это работает.
Следующая строка.
Третья строка. <class ‘str’>

Тип везде str. Все вроде бы одинаково, но первый и второй print игнорируют \n, а вот после replace все работает.

Отредактировано m1r42 (Июль 26, 2022 12:50:01)

Офлайн

#10 Июль 26, 2022 12:53:28

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вывод текста с символом перенос строки "\n" из базы MySQL в поле Text не хочет работать правильно

m1r42

 neispr = str(answer2)[13:len(str(answer2))-3]
print(neispr,type(neispr))
ну, разумеется, тип будет str, потому что вы предыдущей строкой значение кастанули к str. Проверьте типы до всяческих преобразований



Офлайн

  • Начало
  • » Python для новичков
  • » Вывод текста с символом перенос строки "\n" из базы MySQL в поле Text не хочет работать правильно[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version