2017-10-10 2 views
1

Ich habe 2 TB Daten, und ich muss die Dateien für einige Analysen entpacken. Aufgrund des Festplattenplatzproblems kann ich jedoch nicht alle Dateien auf einmal entpacken. Was ich dachte, ist zuerst zwei tausend von ihnen zu entpacken, dann meine Analyse zu machen und sie für das nächste 2000 zu wiederholen. Wie könnte ich es tun?Entpacken der Anzahl der Dateien iterativ mit Python

import os, glob 
import zipfile 


root = 'C:\\Users\\X\\*' 
directory = 'C:\\Users\\X' 
extension = ".zip" 
to_save = 'C:\\Users\\X\\to_save' 

#x = os.listdir(path)[:2000] 
for folder in glob.glob(root): 
    if folder.endswith(extension): # check for ".zip" extension 
     try: 
      print(folder) 
      os.chdir(to_save) 
      zipfile.ZipFile(os.path.join(directory, folder)).extractall(os.path.join(directory, os.path.splitext(folder)[0])) 

     except: 
      pass 
+0

Glaubst du wirklich, es ist ein Duplikat? – edyvedy13

+0

Was ich tun muss, ist die ersten 2000, also Dateien zwischen 1-2000 aufgeführt; dann 2001- 4000 – edyvedy13

Antwort

3

Was ?:

import os 
import glob 
import zipfile 

root = 'C:\\Users\\X\\*' 
directory = 'C:\\Users\\X' 
extension = ".zip" 
to_save = 'C:\\Users\\X\\to_save' 

# list comp of all '.zip' folders 
folders = [folder for folder in glob.glob(root) if folder.endswith(extension)] 

# only executes while there are folders remaining to be processed 
while folders: 
    # only grabs the next 2000 folders if there are at least that many 
    if len(folders) >= 2000: 
     temp = folders[:2000] 
    # otherwise gets all the remaining (i.e. 1152 were left) 
    else: 
     temp = folders[:] 

    # list comp that rebuilds with elements not pulled into 'temp' 
    folders = [folder for folder in folders if folder not in temp] 

    # this was all your code, I just swapped 'x' in place of 'folder' 
    for x in temp: 
     try: 
      print(x) 
      os.chdir(to_save) 
      zipfile.ZipFile(os.path.join(directory, x)).extractall(os.path.join(directory, os.path.splitext(x)[0])) 
     except: 
      pass 

Diese eine temporäre Liste der .zip macht, und entfernt dann die Elemente aus der ursprünglichen Liste. Einziger Nachteil ist, dass folders geändert wird, so dass es irgendwann leer sein wird, wenn Sie es jemals anderswo verwenden müssen.

+0

Vielen Dank für Ihre Antwort Ich fand andere Lösung, gespeicherte Dateipfade zu CSV, anstatt sie in einer Liste zu speichern – edyvedy13

Verwandte Themen