Arquivos xml zipados dentro de outros zipados

Bom dia.

Estou começando a trabalhar com notas fiscais eletrônicas. Recebo arquivos em xml zipados por período (02/2021, 03/2021 etc), onde dentro de cada período tem outros arquivos também zipados, representando os dias do mês (01, 02, 03 etc).

Como faço para extraí-los todos e juntá-los em um único arquivo?

Não posso incluir exemplo porque não são dados públicos.

Agradeço desde já a atenção.

Mário.

Opa! Pelo o que entendi, seus arquivos vem assim, correto?

  • 02_2021.zip
    • 01_02_2021.zip
      • 01_02_2021.xml
    • 02_02_2021.zip
      • 02_02_2021.xml
  • 03_2021.zip
    • 01_03_2021.zip
      • 01_03_2021.xml
    • 02_03_2021.zip
      • 02_03_2021.xml

Se for isso, você pode tentar o seguinte. Primeiro, você precisa descompactar todos os arquivos de primeiro nível (mês) e, em seguida, descompactar os de segundo nível (dias), para seguir para a leitura dos arquivos.

No R, seria algo parecido com o seguinte (não tenho como testar sem os arquivos).

arquivos_mes <- list.files(path = "diretorio_dos_arquivos_mes", pattern = "*.zip")

for(a in arquivos_mes){
  unzip(zipfile = a, exdir = "arquivos_dia")
}

arquivos_dia <- list.files(path = "arquivos_dia", pattern = "*.zip")

for(b in arquivos_dia){
  unzip(zipfile = b, exdir = "arquivos_dia")
}
2 curtidas

Obrigado pela resposta.

Os arquivos estão dispostos conforme o esquema que você fez. De modo que quando crio o objeto ‘arquivos_mes’ retorna
[1] “2020_03.zip” “2020_04.zip” “2020_05.zip” “2020_06.zip”
[5] “2020_07.zip”.

Porém quando faço o

for(a in arquivos_mes){
unzip(zipfile = a, exdir = “arquivos_dia”)
}

cria-se a pasta ‘arquivo_dia’ com
[1] “01.zip” “02.zip” “03.zip” “04.zip” “05.zip” “06.zip” “07.zip”
[8] “08.zip” “09.zip” “10.zip” “11.zip” “12.zip” “13.zip” “14.zip”
[15] “15.zip” “16.zip” “17.zip” “18.zip” “19.zip” “20.zip” “21.zip”
[22] “22.zip” “23.zip” “24.zip” “25.zip” “26.zip” “27.zip” “28.zip”
[29] “29.zip” “30.zip” “31.zip”

Não deveria retornar arquivos do tipo abaixo? (Para depois fazer o for e chegar ao conjunto de XMLs)?
2020_03_01.zip, 2020_03_02.zip, 2020_03_03.zip…
2020_04_01.zip, 2020_04_02.zip, 2020_04_03.zip…
2020_05_01.zip, 2020_05_02.zip, 2020_05_03.zip…

Mais uma vez, agradeço a atenção.

Ah entendi, o que acontece é que no nome arquivos de dia não tem o mês no nome. Então vai sobrescrever… vou pensar em algo e te falo.

Valeu.

Não seria o caso de fazer um mês de cada vez e depois seus dias, e então pular para o 2º mês e seus dias e assim sucessivamente?

Abs.

Sim, esse é o caminho…

Realmente entendi que o caminho é dezipar o 1º mês e depois seus dias; então o 2º mês e seus dias; e, assim por diante. Mas não sei como transformar isto num script. Teria alguma sugestão? Agradeço desde já a atenção. Mário.

Raphael, juntando suas sugestões com algumas consultas à internet cheguei e esta resultado.

library(tidyverse)

1º fazendo para um único mês. -------------------------------------------

Unzip o 2020_05.zip.

E guardando o resultado na pasta arquivos_dia.

É importante notar que a função unzip recebe o caminho até o

arquivo que será dezipado e o caminho onde será guardado o

resultado (exdir).

unzip("~/R projetos no Acer Aspire 3/unzip XML/arquivos_mes/2020_05.zip",
exdir = “~/R projetos no Acer Aspire 3/unzip XML/arquivos_dia”)

O resultado é um monte de outros arquivos zipados.

Cada um representando um dia.

Agora listamos os resultados.

zip_f ← list.files(path = “~/R projetos no Acer Aspire 3/unzip XML/arquivos_dia”,
pattern = “*.zip”, full.names = TRUE)

Passando a lista de arquivos unzipados de novo pela função unzip.

E guardando os resultados na pasta ponto_final.

out_dir ← “~/R projetos no Acer Aspire 3/unzip XML/ponto_final”
purrr::map(zip_f, unzip, exdir = out_dir)

2. Transformando o que foi feito acima em função. ---------------------------------------------

dezipa_xml_nfe ← function(path_file) {

Fazendo de um único mês.

unzip(path_file,
exdir = “~/R projetos no Acer Aspire 3/unzip XML/arquivos_dia”)

Listando os arquivos resultantes.

zip_f ← list.files(path = “~/R projetos no Acer Aspire 3/unzip XML/arquivos_dia”,
pattern = “*.zip”, full.names = TRUE)

Passando a lista de arquivos unzipados de novo pela função unzip

e descarregando no dir_xml.

out_dir ← “~/R projetos no Acer Aspire 3/unzip XML/ponto_final”
purrr::map(zip_f, unzip, exdir = out_dir)
}

Exemplo.

Fazendo o arquivo 2016_06.zip

dezipa_xml_nfe("~/R projetos no Acer Aspire 3/unzip XML/2016_06.zip")