Mit Python muss ich eine Datei lesen und feststellen, ob alle Zeilen gleich lang sind oder nicht. Wenn dies der Fall ist, verschiebe ich die Datei in einen "guten" Ordner und wenn sie nicht alle die gleiche Länge haben, verschiebe ich sie in einen "schlechten" Ordner und schreibe ein Word-Dokument, das sagt, welche Zeile nicht die gleiche ist. Irgendwelche Hilfe oder Möglichkeiten zu starten?Datei lesen und feststellen, ob alle Zeilen die gleiche Länge haben
Antwort
First off, können Sie die Datei, hier example.txt
lesen und alle Zeilen in einer Liste setzen, content
:
with open(filename) as f:
content = f.readlines()
Als nächstes müssen Sie alle Zeilenumbrüche aus dem Ende einer Zeile trimmen und sie setzen in einer anderen Liste result
:
for line in content:
line = line.strip()
result.append(line)
Nun ist es nicht so schwer, die Länge jedes Satzes zu erhalten, und da Sie Linien wollen, die schlecht sind, Sie Schleife durch die Liste:
for line in result:
lengths.append(len(line))
So hat das i-te Element von result
Länge [i-th Element von lengths
]. Wir können einen Zähler für die Leitungslänge erstellen, die in der Liste am häufigsten vorkommt, es ist so einfach wie eine Zeile!
most_occuring = max(set(lengths), key=lengths.count)
Jetzt können wir ein anderes for-loop
zu überprüfen, welche machen Längen mit den meisten vorkommenden entsprechen nicht und fügen Sie diejenigen bad-lines
:
for i in range(len(lengths)):
if (lengths[i] != most_occuring):
bad_lines.append([i, result[i]])
Der nächste Schritt ist zu prüfen, wo die Datei gehen muss , die guten Ordner oder die schlechten Ordner:
if len(bad_lines == 0):
#Good file, move it to the good folder, use the os or shutil module
os.rename("path/to/current/file.foo", "path/to/new/desination/for/file.foo")
else:
#Bad file, one or more lines are bad, thus move it to the bad folder
os.rename("path/to/current/file.foo", "path/to/new/desination/for/file.foo")
der letzte Schritt, die schlechten Linien auf einem andere Datei schreibt, die tun kann, da haben wir die schlechten Linien bereits in einer Liste bad_lines
:
with open("bad_lines.txt", "wb") as f:
for bad_line in bad_lines:
f.write("[%3i] %s\n" % (bad_line[0], bad_line[1]))
Es ist nicht eine doc-Datei, aber ich denke, das ist ein schöner Start ist. Sie können sich das docx-Modul ansehen, wenn Sie wirklich in eine doc-Datei schreiben möchten.
EDIT: Hier ist ein Beispiel Python-Skript.
Kurzschlüsse, stoppt er die Datei in dem ersten nicht-Spiel zu lesenwith open(filename) as read_file:
length = len(read_file.readline())
if all(len(line) == length for line in read_file):
# Move to good folder
else:
# Move to bad folder
Seit all()
sind.
with open("example.txt") as f:
content = f.readlines()
result = []
lengths = []
#Strip the file of \n
for line in content:
line = line.strip()
result.append(line)
lengths.append(len(line))
most_occuring = max(set(lengths), key=lengths.count)
bad_lines = []
for i in range(len(lengths)):
if (lengths[i] != most_occuring):
#Append the bad_line to bad_lines
bad_lines.append([i, result[i]])
#Check if it's a good, or a bad file
#if len(bad_lines == 0):
#Good File
#Move file to the good folder...
#else:
#Bad File
with open("bad_lines.txt", "wb") as f:
for bad_line in bad_lines:
f.write("[%3i] %s\n" % (bad_line[0], bad_line[1]))
'line = line.strip()' trimmt ein bisschen mehr als nur das Zeilenumbruchzeichen am Ende einer Zeile. – Evert
Es ist nicht nötig, die Zeilenumbrüche zu entfernen. Sie sollten die gleiche Länge haben. – zondo
Sie haben recht damit ein bisschen mehr zu strippen, aber es macht die Arbeit erledigt. Sie könnten es zwar auch entfernen, aber es sieht in der Liste ordentlicher aus. Wenn Sie es auslassen, sollten Sie auch das \ n im Write-File-Teil entfernen. Ist das der Grund dafür, dass dies abgelehnt wurde? Dies ist meine erste Antwort, also würde ich gerne wissen, was ich verbessern kann. Ich kann nicht auf Ihre Antwort Zondo kommentieren, aber er fragt auch nach den Linien, die anders sind, so dass Sie alle durchlaufen müssen. Beachten Sie, dass in meiner Antwort auch Teile in einer Schleife für bessere Zeiteffizienz zusammengestellt werden können (nicht viel, es wird immer noch O (n) sein) –
Sie all()
verwenden sollten
Ich versuche, uns diese Methode, und ich bekomme immer diese Fehler Länge = len (file.readline()) AttributeError: 'str' Objekt hat kein Attribut 'readline' –
@JustinStarkman: Sorry, ich hatte einen leichten Tippfehler. Es ist jetzt behoben. – zondo
- 1. xdata und ydata müssen die gleiche Länge haben
- 2. Was ist Scala, um herauszufinden, ob alle Elemente eines Arrays die gleiche Länge haben?
- 3. R Fehler: Daten und Vektor haben nicht die gleiche Länge
- 4. Agda: Paar Vektoren, die die gleiche Länge haben
- 5. Wie man Linien die gleiche Länge bildet?
- 6. SQL Get Anzahl aller Zeilen, die die gleiche ID haben
- 7. lesen und schreiben auf gleiche CSV-Datei
- 8. Wie überprüft man, ob die Permutationen die gleiche Parität haben?
- 9. hinzufügen Arrays, die die gleiche Länge nicht
- 10. Wie überprüft man, ob alle Einträge in einem Zellenfeld die gleiche Größe haben?
- 11. Anfänger Python: Lesen und Schreiben in die gleiche Datei
- 12. Sollten wir Datenbankindizes für Zeilen erstellen, die die gleiche Anzahl von Lese-/Such- und Schreibvorgängen haben?
- 13. Machen Sie alle elemants eines Zeichenvektor die gleiche Länge
- 14. Bash-Skript - feststellen, ob die Datei geändert wurde?
- 15. Laravel Überprüfen Sie, ob Benutzer die gleiche Beziehung haben
- 16. Lesen Sie alle Zeilen mit BufferedReader
- 17. Wie überprüft man, ob zwei vars die gleiche Referenz haben?
- 18. Die letzten 30.000 Zeilen einer Datei lesen
- 19. CSS, Javascript und Bilder haben keine Länge
- 20. Machen Sie alle div.Hindernisse haben die gleiche Funktion
- 21. WPF-WrapPanel - Alle Elemente sollten die gleiche Breite haben
- 22. Lesen Sie alle Zeilen einer cpp-Datei mit Fgets
- 23. Bootstrap-Säulen haben nicht die gleiche Höhe
- 24. Alle Schreib-Funktionen in Python, die die gleiche Sicherheit haben wie ACID in Datenbanken
- 25. Haskell lesen Zeilen der Datei
- 26. C# feststellen, ob alle Zeichen in einer Zeichenfolge gleich sind
- 27. Eclipse: Haben Sie die gleiche Datei in zwei Editoren geöffnet?
- 28. Wie kann ich feststellen, ob eine Datei umbenannt wurde?
- 29. Zwei Prozesse lesen/schreiben in die gleiche Datei Python
- 30. , wie Sie feststellen, ob die Variable
Könnten Sie bitte einen Code-Schnipsel bereitstellen? Hinweis: Um diese Aufgabe zu erledigen, werden mehrere "for" - und do-while-Schleifen benötigt. Außerdem wird der Status jeder Zeile und jeder Seite gespeichert. Plus VBS für das Word-Dokument, das als Vorlage erstellt wird, die jedes Mal aufgerufen wird, wenn sie zur Ausgabe benötigt wird. Viel Arbeit hier. – Sparky256