2016-08-06 43 views
-3

Ich habe eine große TXT-Datei enthält 1 Million Zeilen, möchte ich sie in kleine txt-Dateien teilen jede enthält 10 Zeilen, wie es mit Python zu tun? fand ich einige verwandte Fragen und haben Code wie folgt aus:Wie große txt-Datei in kleine txt-Dateien mit python Zeile aufgeteilt werden

def split_file(filepath, lines=30): 

    """Split a file based on a number of lines.""" 

    path, filename = os.path.split(filepath) 

    # filename.split('.') would not work for filenames with more than one . 

    basename, ext = os.path.splitext(filename) 

    # open input file 

    with open(filepath, 'r') as f_in: 

     try: 
      # open the first output file 
      f_out = open(os.path.join(path, '{}_{}{}'.format(basename, 0, ext)), 'w') 
      # loop over all lines in the input file, and number them 
      for i, line in enumerate(f_in): 
       # every time the current line number can be divided by the 
       # wanted number of lines, close the output file and open a 
       # new one 
       if i % lines == 0: 
        f_out.close() 
        f_out = open(os.path.join(path, '{}_{}{}'.format(basename, i, ext)), 'w') 
       # write the line to the output file 
       f_out.write(line) 
     finally: 
      # close the last output file 
      f_out.close() 

aber es funktioniert nur in kleinen txt-Datei aber nicht in meiner Zieldatei arbeiten, und keine Fehlerinformationen Ich weiß nicht, warum.

+3

Es sieht so aus, als ob Sie möchten, dass wir einen Code für Sie schreiben. Während viele Benutzer bereit sind, Code für einen in Not geratenen Coder zu produzieren, helfen sie normalerweise nur, wenn das Poster bereits versucht hat, das Problem selbst zu lösen. Eine gute Möglichkeit, diesen Aufwand zu demonstrieren, besteht darin, den Code, den Sie bisher geschrieben haben, die Beispieleingabe (falls vorhanden), die erwartete Ausgabe und die Ausgabe, die Sie tatsächlich erhalten (Ausgabe, Rückverfolgung usw.), einzubeziehen. Je mehr Details Sie angeben, desto mehr Antworten erhalten Sie wahrscheinlich. Überprüfen Sie die [FAQ] (http://stackoverflow.com/tour) und [Wie zu fragen] (http://stackoverflow.com/questions/how-to-ask). – TigerhawkT3

+1

Was hast du bisher versucht? Mit welchem ​​Teil der Aufgabe haben Sie Probleme? – EJoshuaS

+0

Ich habe aktualisiert danke – zjsuper

Antwort

0

Dies sollte funktionieren. Es ist ein kleiner Kreisverkehr, aber sollte Ihren mysteriösen Fehler umgehen, während er lesbar ist.

Zuerst definieren wir ein paar nützliche Funktionen. Der erste liest eine Datei und macht jede Zeile zu einem Listenelement, und die zweite schreibt Listen als Dateien.

Hinweis: Die zweite Funktion erstellt eine neue Datei, wenn keine Datei mit diesem Namen vorhanden ist, oder überschreibt die Datei, falls dies der Fall ist.

Als nächstes definieren wir die Funktion, die Dateien in kleinere Dateien bricht.

def breakdown(target, new_file_name, chunk_length = 10): 
    # First let's store a list representing the data from the original file 
    data = line_reader(target) 

    # part_no is solely for naming purposes 
    part_no = 0 
    # this list will be used to hold smaller chunks of lines 
    tmp_list = [] 
    condition = True 
    while condition: 
     for i in range(chunk_length): 
      # just a basic check to make sure that there are still lines left to be replaced 
      if len(data) > 0: 
       tmp_list.append(data.pop(0)) 
      else: 
       condition = False 
       tmp_list.append('\n') 
       break 

     part_no += 1 
     line_writer(str(new_file_name + ' ' + str(part_no)), tmp_list) 
     tmp_list = [] 

Aufruf Bruchs wird aufgeteilt in kleinere Dateien von chunk_length Linien Ziel (10 standardmäßig) durch eine einzelne Leerzeile am Ende gefolgt. Die letzte Datei ist nur das, was von der ursprünglichen Datei übrig ist.