faccio questo un modo più comprensibile e con tagli meno brevi, al fine di dare una maggiore comprensione di come e perché funziona. Le risposte precedenti funzionano, ma se non hai familiarità con certe funzioni integrate, non capirai cosa sta facendo la funzione.
Poiché non hai pubblicato alcun codice, ho deciso di farlo in questo modo poiché potresti non conoscere cose diverse dalla sintassi python di base dato che il modo in cui hai formulato la domanda ha fatto sembrare che non avessi provato né avuto alcun indizio come come affrontare la questione
Ecco i passaggi per fare questo in Python base:
in primo luogo si dovrebbe leggere il file in un elenco per la custodia:
my_file = 'really_big_file.txt'
hold_lines = []
with open(my_file,'r') as text_file:
for row in text_file:
hold_lines.append(row)
secondo luogo, è necessario impostare un modo di creare il nuovo file per nome!Vorrei suggerire un ciclo con un paio di contatori:
outer_count = 1
line_count = 0
sorting = True
while sorting:
count = 0
increment = (outer_count-1) * 300
left = len(hold_lines) - increment
file_name = "small_file_" + str(outer_count * 300) + ".txt"
In terzo luogo, all'interno di quel ciclo avete bisogno di alcuni cicli annidati che salveranno le righe corrette in un array:
hold_new_lines = []
if left < 300:
while count < left:
hold_new_lines.append(hold_lines[line_count])
count += 1
line_count += 1
sorting = False
else:
while count < 300:
hold_new_lines.append(hold_lines[line_count])
count += 1
line_count += 1
Ultima cosa, di nuovo in il vostro primo ciclo è necessario scrivere il nuovo file e aggiungere il vostro ultimo incremento del contatore in modo che il ciclo passerà attraverso ancora e scrivere un nuovo file
outer_count += 1
with open(file_name,'w') as next_file:
for row in hold_new_lines:
next_file.write(row)
nota: se il numero di righe non è divisibile b y 300, l'ultimo file avrà un nome che non corrisponde all'ultima riga del file.
E 'importante capire perché questi cicli di lavoro. È stato impostato in modo che nel ciclo successivo, il nome del file che si scrive cambi perché il nome dipende da una variabile variabile. Si tratta di uno strumento di scripting molto utile per l'accesso al file, l'apertura, la scrittura, l'organizzazione ecc
Nel caso in cui non si poteva seguire quello che era in quello ciclo, qui è la totalità della funzione:
my_file = 'really_big_file.txt'
sorting = True
hold_lines = []
with open(my_file,'r') as text_file:
for row in text_file:
hold_lines.append(row)
outer_count = 1
line_count = 0
while sorting:
count = 0
increment = (outer_count-1) * 300
left = len(hold_lines) - increment
file_name = "small_file_" + str(outer_count * 300) + ".txt"
hold_new_lines = []
if left < 300:
while count < left:
hold_new_lines.append(hold_lines[line_count])
count += 1
line_count += 1
sorting = False
else:
while count < 300:
hold_new_lines.append(hold_lines[line_count])
count += 1
line_count += 1
outer_count += 1
with open(file_name,'w') as next_file:
for row in hold_new_lines:
next_file.write(row)
Se si utilizza il primo script in python 3.x, sostituire '' 'izip_longest''' con il nuovo' '' zip_longest''' https://docs.python.org/3/library/ itertools.html # itertools.zip_longest –