400.00 Textdateien

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Stondcyborg
User
Beiträge: 4
Registriert: Samstag 17. Dezember 2022, 14:26
Wohnort: Frankfurt

Hallo zusammen, Ich bin eine Rentner der sich ein Hobby zugelegt hat und das ist ein OCR-Programm
Nun ich brauche zum Trainieren dieses OCR Programms Trainingsdaten.

Die benötigten 400.000 Bilddateien konnte ich erstellen, diese Programm gibt aber den Text dieser Bilder nur als eine Textdatei aus in der Zeilenweise der verwendete Text steht, also 400.000 Zeilen Text!

Code: Alles auswählen

 label_path = os.path.join(flags.save_dir, 'labels.txt')
Ich benötige aber immer eine Bilddatei und eine Textdatei, also 00000001.tif und 00000001.txt
usw. usw .usw.

Nun zu meinem Problem. Eine Textdatei zu erstelle ist ja kein Problem , auch die 400.000 Zeile in der Konsole ausgeben ist noch machbar :

Code: Alles auswählen

#!/usr/bin/python

file = open("labels.txt","r")
for line in file:
    print(line.rstrip())
file.close()
Nur und ich suche nun schon seit 3 Wochen nach einer Lösung und komme einfach nicht weiter! Wie erstelle ich die benötigten 400.000 Textdateien beginnend bei 00000000.txt und wie bekomme ich den Text in diese Dateien?

Ich hatte schon aus Verzweiflung versucht mit der Hand diese zu erstellen, aber bei dieser Menge, würde ich Monate brauchen………..
Für jedewede Anregung wäre ich dankbar!
Benutzeravatar
__blackjack__
User
Beiträge: 13121
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Stondcyborg: Wenn das erstellen einer Textdatei kein Problem ist, und das lesen von Textzeilen in einer Schleife kein Problem ist, dann ist auch das erstellen von einer Textdatei pro Zeile kein Problem. Statt `print()`, oder zusätzlich, müsstest Du halt eine Textdatei pro Zeile erstellen. Das Wissen dafür hast Du bereits. Es kann sein das Du das etwas umständlicher machst als es sein müsste, oder das der Dateiname zwar die Nummer enthält, aber es mit den führenden 0en Probleme gibt, aber grundsätzlich müsstest Du ein Programm zeigen können das eine nummerierte Datei pro Zeile der Eingabedatei erstellt.

Oder beschreiben können wo das konkrete Problem liegt.

Bis wohin hast Du denn das Tutorial in der Python-Dokumentation durchgearbeitet? Da sollte alles notwendige drin vorkommen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Stondcyborg
User
Beiträge: 4
Registriert: Samstag 17. Dezember 2022, 14:26
Wohnort: Frankfurt

Ok, erstmal danke für die Antwort.
Ich hatte mich zu sehr am Modul für die Bilderstellung fest gebissen.

Gut, da das alles zu weit führen würde, erstelle ich die Dateien doch lieber mit der Hand!
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Wirklich - 400k Dateien von Hand?
Dann biete ich Dir lieber das folgende an (ungetestet):

Code: Alles auswählen

with open("labels.txt", encoding="utf-8") as labels:
    for num, label in enumerate(labels, start=1):
        fname = f"{num:0>8d}.txt"
        with open(fname, "w", encoding="utf-8") as fobj:
            fobj.write(label)
nezzcarth
User
Beiträge: 1638
Registriert: Samstag 16. April 2011, 12:47

Falls es wirklich darum geht, die Datei in 400.000 einzeilige Einzeldateien zu splitten, geht das mit dem Linux/Unix-Befehlt split in einer Zeile:

Code: Alles auswählen

split -l1 -d deinedatei.txt  ""
Ich halte das aber für keine gute Idee, das in so viele kleine Einzeldateien im selben Ordner zu zerlegen. Moderne Dateisysteme verkraften zwar so viele Dateien in einem einzigen Ordner und das ist technisch möglich, aber nach meiner Erfahrung wird das trotzdem irgendwann beschwerlich in der Handhabung, abhängig vom Dateisystem und der Hardware. Ältere Dateisysteme wie Fat32, das heute noch recht of für USB Sticks etc. verwendet wird, geben da komplett auf.
Stondcyborg
User
Beiträge: 4
Registriert: Samstag 17. Dezember 2022, 14:26
Wohnort: Frankfurt

Erstmal danke für eure Antworten.
Das Programm braucht so viele Dateien und noch mehr! Probleme macht das aber keine, man muss nur mit dem Dateimanager das weg bleiben :lol:
Bild

Eure Vorschläge teste ich noch .
Stondcyborg
User
Beiträge: 4
Registriert: Samstag 17. Dezember 2022, 14:26
Wohnort: Frankfurt

So , das mit split hatte ich schon getestet, nur ist da das Problem mit dem Zahlen .
Bei split erstellt man 0 - 89 und dann geht es weiter mit 9832 bis ende. Habe ich keine Lösung finden können, aber praktisch ist split schon .

Das andere läuft wie ich es wollte, DANKE

Zur kurzen Erklärung. ich hatte versucht das Erzeugen der Text-Dateien in das andere Programm zu Integrieren, aber das ist nicht nötig! Ich hatte zu spät bemerkt, das das Modul nur für Bilder ist.

Nochmal zu der Größe der Verzeichnis. Wenn Bund und Text erstellt sind , wird von den Programm noch 2 Daten pro Bild erstellt, so das bei 400.000 Bilder dann 1,6 Millionen Dateien in dem Verzeichnis sind . :shock: Wie gesagt das geht, braucht aber das richtig heran gehen beim bearbeiten!

Das Einlesen dieser Dateien beim Programmstart, benötigt dann ca. 6 Stunden. Das ganze Training ca 4 Wochen .............. :o

Wie gesagt nochmals DANKE!
nezzcarth
User
Beiträge: 1638
Registriert: Samstag 16. April 2011, 12:47

Was ist denn "das andere Programm" und "das Modul"? Ich glaube, wir brauchen da mehr Details, um dir helfen zu können und du müsstest bitte konkreter werden. So wirklich verstehe ich noch nicht, um was es im Detail geht und um welche Software/Bibliotheken, außer, dass es etwas mit OCR zu tun hat.
Benutzeravatar
grubenfox
User
Beiträge: 433
Registriert: Freitag 2. Dezember 2022, 15:49

Stondcyborg hat geschrieben: Sonntag 18. Dezember 2022, 17:55 Bei split erstellt man 0 - 89 und dann geht es weiter mit 9832 bis ende.
:?:
Antworten