Open gabivaleriano opened 1 year ago
Pela mensagem de erro, é problema de conexão, pois o PySUS tenta se conectar com o servidor do DATASUS.
Verifique se você tem uma conexão de rede ativa e tenta de novo.
Agradeço a resposta! Sim, tenho conexão de rede e mesmo assim continuo com o mesmo erro.
Boa tarde. Eu também não consigo desde ontem.
!sudo apt install python3.9 python3.9-dev python3.9-venv
!python3.9 -m venv .env
!source .env/bin/activate
!pip install pysus
Tentei todas as seguintes formas de import:
from pysus.online_data.CNES import download
from pysus.online_data.SIA import download
from pysus.ftp.databases.cnes import CNES
from pysus.online_data import SIM, CNES, IBGE, parquets_to_dataframe, search_string, download
Estou tentando conectar desde ontem, mas eu consigo fazer o download via FTP com outra bibliotecas.
Será mesmo conexão?
Outra coisa é que ao tentar abrir o arquivo .DBC, agora tem dado este erro:
anos = [23]
meses = ['08']
estados =["AC","AL","AP","AM","BA","CE","DF","ES","GO","MA","MT", "MS","MG","PA","PB","PR","PE","PI","RJ","RN","RS","RO","RR","SC","SP","SE","TO"]
nomesgrupos = {
"Dados Complementares": "DC" ,
"Estabelecimento de Ensino": "EE",
"Estabelecimento Filantrópico": "EF",
"Equipes": "EP",
"Equipamentos": "EQ",
"Gestão e Metas": "GM",
"Habilitação": "HB",
"Incentivos": "IN",
"Leitos": "LT",
"Profissional": "PF",
"Regra Contratual": "RC",
"Serviço Especializado": "SR",
"Estabelecimentos": "ST"
}
grupos = [nomesgrupos['Estabelecimentos']]
banco={}
ftp = FTP(f'ftp.datasus.gov.br')
ftp.login() # Login sem necessidade de usuário e senha
for y in anos:
for m in meses:
for uf in estados:
for gp in grupos:
dir = 'dissemin/publicos/CNES/200508_/Dados/' + gp
ftp.cwd(dir) #Diretório para os arquivos do CNES
file=gp+uf+str(y)+m+".dbc"
# Download dos dados
with open(file, 'wb') as fp:
ftp.retrbinary('RETR ' + file, fp.write, 1024)
print("Banco de " + file + " baixado!")
ftp.quit() # Fecha a conexão com o FTP
df = read_dbc('/content/STTO2308.dbc', encoding='iso-8859-1')
ERROR: Failed to read DBF: unpack requires a buffer of 32 bytes
Podem me ajudar?
Muito Obrigado
Olá! Alguma novidade acerca desse problema?
Ao tentar acessar usando:
SPa = download('AL', 2023, 4, group='PA')[0] # Some large datasets are split in more than one DBC
dfSPa = parquets_to_dataframe(SPa)
Recebo o Erro:
---------------------------------------------------------------------------
TimeoutError Traceback (most recent call last)
[<ipython-input-6-ca3a8d608464>](https://localhost:8080/#) in <cell line: 1>()
----> 1 SPa = download('AL', 2023, 4, group='PA')[0] # Some large datasets are split in more than one DBC
2 dfSPa = parquets_to_dataframe(SPa)
7 frames
[/usr/lib/python3.10/socket.py](https://localhost:8080/#) in create_connection(address, timeout, source_address)
831 if source_address:
832 sock.bind(source_address)
--> 833 sock.connect(sa)
834 # Break explicitly a reference cycle
835 err = None
TimeoutError: [Errno 110] Connection timed out
Alguem poderia me ajudar, por favor?
Sobre o Connection timed out
, é um problema de indisponibilidade do FTP do Datasus mesmo. Pra testar basta ir no https://datasus.saude.gov.br/transferencia-de-arquivos/# e tentar fazer acesso usando a ferramenta FTP de sua escolha.
Embora não seja culpa do PySUS, acho que dá pra melhorar a mensagem de erro e torná-la mais amigável. Posso abrir um PR pra isso.
Sobre o
Connection timed out
, é um problema de indisponibilidade do FTP do Datasus mesmo. Pra testar basta ir no https://datasus.saude.gov.br/transferencia-de-arquivos/# e tentar fazer acesso usando a ferramenta FTP de sua escolha.Embora não seja culpa do PySUS, acho que dá pra melhorar a mensagem de erro e torná-la mais amigável. Posso abrir um PR pra isso.
Obrigado @anapaulagomes fique à vontade para abrir este PR!
Descobri que o mesmo erro acontece para quem está fora do Brasil também. Vou abrir uma reclamação (e abrir um PR com uma mensagem melhorada).
Olhando o código, percebi que não faz sentido essa pequena mensagem de erro sem a #59.
Oi,
não consigo importar a biblioteca:
TimeoutError Traceback (most recent call last) Cell In[1], line 1 ----> 1 from pysus.online_data import SINAN 2 import pandas as pd
File ~/env1/lib/python3.11/site-packages/pysus/online_data/init.py:139 135 df = df.convert_dtypes() 136 return df --> 139 class FTP_Inspect: 140 """ 141 Databases: "SINAN", "SIM", "SINASC", "SIH", "SIA", "PNI", "CNES", "CIHA" 142 FTP_Inspect will focus mainly on enter in DataSUS ftp server (...) 154 for the Database. Groups may be also required. 155 """ 157 database: str
File ~/env1/lib/python3.11/site-packages/pysus/online_data/init.py:159, in FTP_Inspect() 157 database: str 158 _ds_paths: list --> 159 ftp_server: FTP = FTP('ftp.datasus.gov.br') 160 available_dbs: list = list(DB_PATHS.keys()) 162 def init(self, database: str) -> None:
File /usr/lib/python3.11/ftplib.py:121, in FTP.init(self, host, user, passwd, acct, timeout, source_address, encoding) 119 self.timeout = timeout 120 if host: --> 121 self.connect(host) 122 if user: 123 self.login(user, passwd, acct)
File /usr/lib/python3.11/ftplib.py:158, in FTP.connect(self, host, port, timeout, source_address) 156 self.source_address = source_address 157 sys.audit("ftplib.connect", self, self.host, self.port) --> 158 self.sock = socket.create_connection((self.host, self.port), self.timeout, 159 source_address=self.source_address) 160 self.af = self.sock.family 161 self.file = self.sock.makefile('r', encoding=self.encoding)
File /usr/lib/python3.11/socket.py:850, in create_connection(address, timeout, source_address, all_errors) 848 try: 849 if not all_errors: --> 850 raise exceptions[0] 851 raise ExceptionGroup("create_connection failed", exceptions) 852 finally: 853 # Break explicitly a reference cycle
File /usr/lib/python3.11/socket.py:835, in create_connection(address, timeout, source_address, all_errors) 833 if source_address: 834 sock.bind(source_address) --> 835 sock.connect(sa) 836 # Break explicitly a reference cycle 837 exceptions.clear()
TimeoutError: [Errno 110] Connection timed out
Alguma experiência parecida?
Muito obrigada!!