Mostrando postagens com marcador python. Mostrar todas as postagens
Mostrando postagens com marcador python. Mostrar todas as postagens

quinta-feira, 30 de agosto de 2018

Some commands of pip - python package manager

In case you have the two python version installed in your system, using pip when you using python2.x and pip3 when using python3.


Installing

Using python 2.x:
$ sudo apt-get install python-pip

or, if you want to use python3:
$ sudo apt-get install python3-pip

Updating

pip
$ sudo pip install --upgrade pip

pip3
$ sudo pip3 install --upgrade pip

You can also use the above command to upgrade the pip packages, see:
$ pip install --upgrade package_name

Installing packages

pip
$ sudo pip install package_name

pip3
$ sudo pip3 install package_name


If you want install an especific package version, use the command like this example:
$ sudo pip install googlemaps==3.0.2

In case you already have this package installed, just upgrade it:
$ sudo pip install --upgrade googlemaps

Listing all of installed packages

pip:
$ sudo pip freeze

pip3
$ sudo pip3 freeze

Checking the pip version

pip
$ sudo pip --version

pip3
$ sudo pip3 --version


That's all folks!

segunda-feira, 18 de maio de 2015

Acentuação no Python


Recentemente, tive problemas ao fazer leitura de arquivos texto extraídos de um arquivo zipado. Obviamente, o fiz usando a função ZipFile, pelo import zipfile.

Ao fazer a leitura e inserir no banco, percebi que os caracteres especiais (aqueles acentuados) não estavam sendo lidos corretamente, retornado interrogações (?), ao invés dos próprios caracteres acentuados.

Fiz vários testes e a solução final, foi simples, como é da natureza Python...rs

Em cada linha do meu buffer, fiz um decode, usando o codec latin_1.

for line in lines:
print line.decode("latin_1")


Para saber de mais codecs, acesse a página https://docs.python.org/2/library/codecs.html

'ascii' codec can't decode byte


Por uma semana lutei contra esse erro procurando em muitos sites e fóruns uma solução. O que me ocorrei era que eu lia a partir de um zip os dados a serem inseridos em uma tabela, e o nome da tabela era retirado a partir do nome do arquivo em questão.

Para entender todo o cenário, vou tentar explicar usando meus os códigos:

def populateTable(data, tableName):
try:
lines = data.splitlines()

part1 = "insert into %s (" % tableName

for line in lines:
lineFields = ""
lineValues = ""

if len(line) == 0:
continue
elif len(line.strip()) == 0:
continue

for it1, it2 in self.table.iteritems():
lineFields += it1 + ","

if it2["tipo"] == "int":
lineValues += line[int(it2["inicio"])-1:int(it2["fim"])] + ","
else:
lineValues += "\"" + line[int(it2["inicio"])-1:int(it2["fim"])] + "\","

query = "insert into %s (%s) values (%s);" % (tableName, lineFields[:-1].lower(), lineValues[:-1])
self.executeQuery(query)

except ValueError as error:
raise

zf = zipfile.ZipFile(self.zipFile) # carrega o arquivo zip com todos os txts que precisarei ler e inserir no mysql

for filename in zf.namelist():
        dataToInsert = zf.read(filename)
        populateTable(dataToInsert, filename[:-4]) # retiro o .txt para sobrar apenas o que será o nome da tabela


Quando eu tentava concatenar o nome tabela (tableName) com os dados retirados desse arquivo, o python me dava o seguinte erro:

__main__:run.py:185 'ascii' codec can't decode byte 0xea in position 35: ordinal not in range(128)
Traceback (most recent call last):
UnicodeDecodeError: 'ascii' codec can't decode byte 0xea in position 35: ordinal not in range(128)

Quando eu tentava concatenar o nome do arquivo com os dados retirados desse arquivo, o python me dava o seguinte erro:

__main__:run.py:185 'ascii' codec can't decode byte 0xea in position 35: ordinal not in range(128)
Traceback (most recent call last):
UnicodeDecodeError: 'ascii' codec can't decode byte 0xea in position 35: ordinal not in range(128)


Após várias pesquisas, encontrei o erro, usando o seguinte teste. Procurei saber quais os tipos de objetos cada variável pertencia.

print type(tableName), repr(tableName)
<type 'unicode'> u' ... '

print type(lineValues), repr(lineValues)
<type 'str'> ' ... '

Assim, vi que a variável 'tableName' era do tipo 'unicode', e a 'lineValues' era do tipo 'str'. O problema era na hora de concatenar as duas variáveis. 

Para resolver foi simples, apenas fiz um cast para string na variável 'tableName' e tudo deu certo!

query = "insert into %s (%s) values (%s);" % (str(tableName), lineFields[:-1].lower(), lineValues[:-1])