Skip to content

Instantly share code, notes, and snippets.

@gpupo
Last active April 29, 2024 17:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save gpupo/33b266be0830f76cd3200866788404df to your computer and use it in GitHub Desktop.
Save gpupo/33b266be0830f76cd3200866788404df to your computer and use it in GitHub Desktop.
Quando você tem um arquivo CSV muito grande e que gostaria de uma amostragem de linhas aleatórias, esse script pode te ajudar
import csv
import random
import sys
import os
"""
Quando você tem um arquivo CSV muito grande e que gostaria de uma amostragem de linhas aleatórias,
esse script pode te ajudar.
Gist: https://gist.github.com/gpupo/33b266be0830f76cd3200866788404df
"""
def gerar_amostra_csv(caminho_arquivo_original, caminho_arquivo_amostra, tamanho_amostra):
"""
Gera uma amostra aleatória de um arquivo CSV.
Args:
caminho_arquivo_original (str): O caminho completo para o arquivo CSV original.
caminho_arquivo_amostra (str): O caminho completo para o novo arquivo CSV de amostra a ser gerado.
tamanho_amostra (int): O número de linhas que deseja incluir na amostra.
"""
# Verificar se o arquivo original existe
if not os.path.isfile(caminho_arquivo_original):
print(f"O arquivo '{caminho_arquivo_original}' não existe.")
return
# Ler o arquivo CSV original e obter o número total de linhas
with open(caminho_arquivo_original, 'r') as arquivo_original:
leitor_csv = csv.reader(arquivo_original)
linhas_originais = list(leitor_csv)
numero_total_linhas = len(linhas_originais)
# Verificar se o tamanho da amostra é válido
if tamanho_amostra > numero_total_linhas:
print(f"O tamanho da amostra ({tamanho_amostra}) é maior do que o número total de linhas no arquivo original ({numero_total_linhas}).")
return
# Ignorar a primeira linha (header)
indices_amostra = random.sample(range(1, numero_total_linhas), tamanho_amostra)
# Criar o arquivo de amostra e escrever as linhas selecionadas
with open(caminho_arquivo_amostra, 'w', newline='') as arquivo_amostra:
escritor_csv = csv.writer(arquivo_amostra)
# Incluir a primeira linha (header) na amostra
escritor_csv.writerow(linhas_originais[0])
for indice in indices_amostra:
escritor_csv.writerow(linhas_originais[indice])
print(f"Amostra gerada com sucesso e salva em '{caminho_arquivo_amostra}'.")
def main():
# Verificar se os argumentos foram fornecidos corretamente na linha de comando
if len(sys.argv) != 4:
print("Uso: python gerador_amostra_csv.py [caminho_arquivo_original] [caminho_arquivo_amostra] [tamanho_amostra]")
return
caminho_origem = sys.argv[1]
caminho_destino = sys.argv[2]
quantidade_linhas_amostra = int(sys.argv[3])
gerar_amostra_csv(caminho_origem, caminho_destino, quantidade_linhas_amostra)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment