прошу прощения, что показался невежественным, но я просто банально не разобрался как применить в этом случае struct (((
Это бинарный запакованный тип данных, который представляет из себя некую структуру, для распаковки нужно знать структуру. В любом случае мой ответ был неправильный
result = cur.fetchall()
а потом каждый элемент в списке обрабатываете decode(“cp1251”)
так ?
result = cur.fetchall()
result = str(result)
for row in result:
print row.decode("cp1251")
Смотря что в списке в result, на сколько я помню возвращается список списков, тобишь если запрос возвращает одну строку то будет row[0].decode(“cp1251”)
если делать вывод после этого куска
result = cur.fetchall()
result = str(result)
print result.decode("cp1251")
то результат вот такой
[('"\xd7\xd0\xdf\xd0\xe0\xde\xdc\xd0\xe0""\xf7\xd2\xda\xd0"',)]
если добавлять к result[0] то он просто выводит первый символ [
если там выбрать например result[9] то будет х
без преобразования
если запихнуть это в цикл как я написал выше
то результат выводит в каждой строке по символу
[
(
’
"
x
d
7
тоже без преобразования … ((
я уже думаю, что это нерешаемый вопрос … вообще нет идей
Все, сделал ))))
ошибка была вообще не там где искали …
я изначально заменил кодировку на ту, которая у меня в базе
environ["NLS_LANG"] = "AMERICAN_AMERICA.CL8ISO8859P5"
как и советовали…
но оказывается, нужно было немного не так заменить …
вобщем сделал вот так
environ["NLS_LANG"] = "AMERICAN_AMERICA.CL8MSWIN1251"
и все заработало ))
всем спасибо ))
особая благодарность rmerkushin ))
я думал после второго моего поста о неудаче ты меня пошлешь как чайника ))
но это все равно не дает ответа на мой вопрос ))
вот этот кусок кода
# -*- coding: utf-8 -*-
import cx_Oracle
from os import environ
environ["NLS_LANG"] = "AMERICAN_AMERICA.CL8MSWIN1251"
dsn_tns = cx_Oracle.makedsn(ip, port, SID)
db = cx_Oracle.connect(login,passw, dsn_tns)
cur = db.cursor()
cur.execute("select city_desc from table where city_desc not like '%запа%' order by dbms_random.value")
rows = cur.fetchall()
united_rows = []
for row in rows:
united_rows.extend(row)
d_row = [s.decode("cp1251") if s else "" for s in united_rows]
for x in d_row:
print x.encode('utf-8')
cur.close()
db.close()
результат
Наталівка
Безлюдівка
Верхнє Піщане
Бикова Гребля
как из этого списка выбрать первое значение??
ограничение в запросе не приносит результата, потому, что потом выбирает совсем не то, что нужно и рандом не работает
пробовал через x[0] так оно показывает только первую букву…
хелп…
немного изменил
d_row = [s.decode("cp1251") if s else "" for s in united_rows]
d_row = '.'.join(d_row)
y = d_row.encode("utf-8")
y.split(".")
print y
cur.close()
результат “y” до сплита
Софіївка.Малі Сорочинці.Джурків.Пилявка
не понимаю почему сплит не пашет, по идее должно вывести все до точки, а значит только “Софіївка”, почему не работает ???
Нужно присвоить результат выполнения сплита?
все, сделал ))
z = y.split(".")
print z[0]
всем спасибо ))
и как обычно не все так гладко как казалось )))
z = y.split(".")
q = z[0]
print q
srch = driver.find_element_by_xpath("//input[@type='text'][@name='city']")#-------city
srch.click()
srch.send_keys(q)
начинает возмущаться на кодировку опять
File “C:\Program Files\Python\lib\json\encoder.py”, line 270, in iterencode
return _iterencode(o, 0)
UnicodeDecodeError: ‘utf8’ codec can’t decode byte 0xd0 in position 0: unexpected end of data
что это может быть?
все, решил )))
добавил строку
q = z[0]
q = unicode(q,'utf-8')
Именно из за проблем с кодировкой (ну есть и еще причины, но главная эта), постоянными encode\decode я и перешел на python 3 там все в unicode )
я бы тоже перешел, и даже пытался, но к сожалению на тестовом окружении заказчика стоит запрет на установку программ, а просить админов, это проще поделить на 0 чем их упросить ))