I have a spreadsheet with 5000 rows that needs to be split into spreadsheets with 790 rows at the most. How can I do this ??
I have a spreadsheet with 5000 rows that needs to be split into spreadsheets with 790 rows at the most. How can I do this ??
Try to use the readlines
function for file manipulation:
file = open('entrada.txt', 'r')
lines = file.readlines()
nfile = 0 # Numero para organizar os arquivos a serem criados, sera incrementado no loop for.
inicio = 0 # Inicio do trecho a ser escrito
fim = 0 # Fim do trecho
nlines = 790 # numero de linhas por arquivo
rangeloop = len(lines)//nlines # numero de iterações a serem executadas no loop for
if len(lines) % nlines > 0: # Caso a conta nao dê exata, faz uma iteração a mais para escrever o que sobrou
rangeloop += 1
for x in range(rangeloop):
nfile += 1
fim += nlines
arq = open("arq"+str(nfile)+".txt", 'w')
arq.write(''.join(lines[inicio:fim]))
inicio = fim
arq.close()
It worked right here, try there and tell me, any questions you can ask, it's badly written because I did it very fast.
Comment : This question is meant to be an answer in Python, but I believe that this answer in
bash
can bring new ares and also serves as a curiosity
To make a proper textual treatment in bash
, I'm assuming the spreadsheet was exported to the CSV , where each row in the worksheet ends with a \n
in the CSV file.
The idea is to play a set of lines in different files. Starting at line 0, the file will end at line 4999. Thus, lines 0-789 will be in the first file, 790-1579 would be in the second file, and so on. To identify which file the n
line belongs to, just make the whole division and add 1: (n / 790) + 1
.
So, come on. We will read from the planilhao.csv
file and play in the planilhinha-I.csv
files, where I
is the index of the file. As previously mentioned, the n
line enters the file with index I = (n / 790) + 1
. Given the general directions of the strategy to follow, let's build the script.
The first part of the strategy is to identify, for each line, what your number is. The following script does this reading / number assignment:
# o número da linha é um inteiro
declare -i line_no=0
while read LINHA; do
# esse echo aqui é só para demonstrar a associação entre a linha lida e o line_no
echo "linha $line_no, conteúdo ($LINHA)"
# incremento o número da linha
line_no+=1
done
To demonstrate the calculation of I
, considering n_lines
the maximum number of lines per file:
# o número da linha é um inteiro
declare -i line_no=0
# número máximo de linhas por arquivo
n_lines=790
while read LINHA; do
# cálculo do índice do arquivo
index=$(( (line_no / n_lines) + 1 ))
# esse echo aqui é só para demonstrar a associação entre o line_no e o index
echo "linha $line_no, arquivo índice $index, conteúdo ($LINHA)"
# incremento o número da linha
line_no+=1
done
So, knowing the index in which each line goes, we can throw the line to the appropriate file:
# o número da linha é um inteiro
declare -i line_no=0
# número máximo de linhas por arquivo
n_lines=790
# prefixo do nome do arquivo
file_prefix=planilhinha
while read LINHA; do
# cálculo do índice do arquivo
index=$(( (line_no / n_lines) + 1 ))
# nome do arquivo
file_name="${file_prefix}-${index}.csv"
# anexa a linha ao arqvuio
echo "$LINHA" >> "$file_name"
# incremento o número da linha
line_no+=1
done
So, that's it. Put this script in a file ( separador_planilha.sh
for example) and send it the file you want to separate. The command would look like this:
./separador_planilha.sh < planilhao.csv