在Python 3中,我有一系列与"固定宽度文件"的链接。它们是包含公司公共信息的网站。每行都有关于公司的信息
示例链接:
和
我在字典中有这些链接。关键是公司所在国家/地区的名称,价值是链接
for chave, valor in dict_val.items():
print (f'Region of country: {chave} - and link with information: {valor}')
Region of country: Acre - and link with information: http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214AC
Region of country: Espírito Santo - and link with information: http://idg.receita.fazenda.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/consultas/download/F.K03200UF.D71214ES
...
我想阅读这些链接(固定宽度文件)并将内容保存为CSV文件。示例内容:
0107397388000155ASSOCIACAO CULTURAL
02073973880001552 16MARIA DO SOCORRO RODRIGUES ALVES BRAGA
0101904573000102ABREU E SILVA COMERCIO DE MEDICAMENTOS LTDA-ME - ME
02019045730001022 49JETEBERSON OLIVEIRA DE ABREU
02019045730001022 49LUZINETE SANTOS DA SILVA ABREU
0101668652000161CONSELHO ESCOLAR DA ESCOLA ULISSES GUIMARAES
02016686520001612 10REGINA CLAUDIA RAMOS DA SILVA PESSOA
0101631137000107FORTERM * REPRESENTACOES E COMERCIO LTDA
02016311370001072 49ANTONIO MARCOS GONCALVES
02016311370001072 22IVANEIDE BERNARDO DE MENEZES
但是要填充CSV列的行,我需要使用"固定宽度文件"
分隔和测试链接的每一行我必须遵循以下规则:
1。如果该行以" 01"开头与公司的注册号及其名称一致。示例:"0107397388000155ASSOCIACAO CULTURAL"
1.1 - " 01"表示此/
1.2 - 该行的接下来的14个职位是公司代码 - 从第3位开始到16年结束 - (07397388000155)/
1.3 - 以下150个职位是公司名称 - 从第17位开始到166结束 - (ASSOCIACAO CULTURAL)
和
2. 如果该行以" 02"开头它将有关于公司合作伙伴的信息。示例:"02073973880001552 16MARIA DO SOCORRO RODRIGUES ALVES BRAGA"
/
2.1 - " 02"表示此/
2.2 - 接下来的十四个职位是公司注册码 - 从第3位开始到第16位结束(07397388000155)/
2.3 - 下一个数字是成员标识符代码,可以是1,2或3 - 开始和结束在第17位 - (2)/
2.4 - 接下来的十四个职位是另一个识别成员的代码 - 从第18位开始到31结束 - (&#34;&#34; - 在这种情况下为空)/ < / p>
2.5 - 接下来的两个职位是另一个识别成员的代码 - 从第32位开始到第33(16)/
结束2.6 - 150个最终位置是合作伙伴的名字 - 从第34位开始到第183位结束(MARIA DO SOCORRO RODRIGUES ALVES BRAGA)
请在这种情况下,一种可能的策略是将每个链接保存为TXT?然后尝试分开立场? 或者有更好的方法来擦除固定宽度的文件吗?
答案 0 :(得分:3)
您可以查看任何URL解析模块。我推荐Requests,尽管您可以使用与python捆绑在一起的urllib。
考虑到这一点,您可以从页面中查看文本,并查看它不需要登录任何来自请求,这只是一个问题:
import requests
r = requests.get('Your link from receita.fazenda.gov.br')
page_text = r.text
在Quickstart部分的请求中了解详情。我将把“位置分离”留给你。
提示:使用正则表达式。
答案 1 :(得分:2)
使用scrapy
,可以将链接中的内容作为流读取并处理,而不保存到文件。 async for i, item in aiostream.stream.enumerate(cursor):
...
的文档为here
此处还有一个相关问题:How do you open a file stream for reading using Scrapy?