LINUX.ORG.RU

python3 и кодировка

 ,


0

1

Хочу распарсить csvшку не полезными данными. Читаю так:

with open("levels.csv", "r") as f:
	for line in f.readlines():
		print("int <<"+line.strip()+">>")
		words = line.strip().split(";")
		print("out <<"+str(words)+">>")
но на выходе получаю, например:
int «5p5(2P°3/2)16d ; 2[5/2]° ;0; 2 ;  12.0561788    »
out «['5p5(2P\xc2\xb03/2)16d\xc2\xa0', '\xc2\xa02[5/2]\xc2\xb0\xc2\xa0', '0', '\xc2\xa02\xc2\xa0', '\xc2\xa0\xc2\xa012.0561788\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0']»
WAT, split(";") ломает мой замечательный юникод, что за фигня?

★★★★★

Подозреваю, ломает не split(";"), ломает str. А точнее не ломает, а даёт тебе такое вот строковое представление списка (words же список у тебя). Почему ломает — не знаю, у меня нормально:

>>> words = x.split()
>>> x = "5p5(2P°3/2)16d ; 2[5/2]° ;0; 2 ;  12.0561788    "
>>> words = x.split()
>>> words
['5p5(2P°3/2)16d', ';', '2[5/2]°', ';0;', '2', ';', '12.0561788']
>>> str(words)
"['5p5(2P°3/2)16d', ';', '2[5/2]°', ';0;', '2', ';', '12.0561788']"

Psych218 ★★★★★
()
Последнее исправление: Psych218 (всего исправлений: 1)
Ответ на: комментарий от Psych218

Ёлки палки, оно у меня оказывается под 2кой запускалось вместо тройки. А что в заголовке скрипта надо указать, что бы он запускался под третьим?

thunar ★★★★★
() автор топика
Ответ на: комментарий от Psych218

А вообще понял. У тебя неразрывный пробел там. Но виновато действительно то, что оно в списке. В самих строках нормально всё.

>>> x = "5p5(2P°3/2)16d ; 2[5/2]° ;0; 2 ;  12.0561788    "
>>> words = x.split(";")
>>> words
['5p5(2P°3/2)16d\xa0', '\xa02[5/2]°\xa0', '0', '\xa02\xa0', '\xa0\xa012.0561788\xa0\xa0\xa0\xa0']
>>> str(words)
"['5p5(2P°3/2)16d\\xa0', '\\xa02[5/2]°\\xa0', '0', '\\xa02\\xa0', '\\xa0\\xa012.0561788\\xa0\\xa0\\xa0\\xa0']"
>>> print(str(words))
['5p5(2P°3/2)16d\xa0', '\xa02[5/2]°\xa0', '0', '\xa02\xa0', '\xa0\xa012.0561788\xa0\xa0\xa0\xa0']
>>> print("\n".join(words))
5p5(2P°3/2)16d 
 2[5/2]° 
0
 2 
  12.0561788  
Psych218 ★★★★★
()
Ответ на: комментарий от thunar

Ёлки палки, оно у меня оказывается под 2кой запускалось вместо тройки. А что в заголовке скрипта надо указать, что бы он запускался под третьим?

python3 вместо python

Psych218 ★★★★★
()

Стоит начать с использования существующего парсера, а не велосипеда.

RazrFalcon ★★★★★
()

зачем велосипедить если в стандартной библиотеке есть парсер csv

Dred ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.