2016-06-16 13 views
0

Ich wollte Zeilen in einer Datei, die weniger als 6 Zeichen waren loswerden, und löschen Sie die gesamte Zeile, die eine Zeichenfolge weniger als 6 Zeichen hatte. Ich habe versucht, diesen Code auszuführen, aber am Ende löschte er die gesamte Textdatei. Wie würde ich darüber gehen?Sortieren/Löschen von Dateizeilen - Python

Code:

import linecache 

i = 1 
while i < 5: 
    line = linecache.getline('file.txt', i) 
    if len(line) < 6: 
     str.replace(line, line, '') 
    i += 1 

Vielen Dank im Voraus!

+1

Kann dies nicht reproduzieren; Die Datei wird nicht gelöscht, wenn ich den Beispielcode ausführe. Öffnen Sie die Datei später im 'write' Modus? – roganjosh

Antwort

2

Sie verlassen nun die offene Methode anstelle des linecache verwenden möchten:

def deleteShortLines(): 
    text = 'file.txt' 
    f = open(text) 
    output = [] 
    for line in f: 
     if len(line) >= 6: 
      output.append(line) 
    f.close() 
    f = open(text, 'w') 
    f.writelines(output) 
    f.close() 
1

mit Iteratoren Geschehen statt Listen sehr lange Dateien zu unterstützen:

with open('file.txt', 'r') as input_file: 
    # iterating over a file object yields its lines one at a time 
    # keep only lines with at least 6 characters 
    filtered_lines = (line for line in input_file if len(line) >= 6) 

    # write the kept lines to a new file 
    with open('output_file.txt', 'w') as output_file: 
     output_file.writelines(filtered_lines)