Text-Datei füllen mit Größe von Partition

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.
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

ja das meinte ich. Okay also die block-counts quasi in die Endlos-schleife dann hab ich die ganzen 0?

wie sollte ich eig die Ausgabe von 53504-53599, 53602-53607, 53658, 53696-53759, 58204-58367, 59648-59903, 60160-60415, 60672-60927, 61440-61695, 62720-62975 verarbeiten? das ist ja - dann wieder einzeln dann wieder von bis etc?!

Ausserdem hab ich wohl hier nen Fehler :/

Code: Alles auswählen

file = open("file.txt", 'r')
for gruppeline in file.readlines():
    if gruppeline.startswith("Block count: "):
        blockcount=re.split('^Block count\s*:\s*([0-9]+)', gruppeline.strip())[1]
        print gruppeline
    elif gruppeline.lower().strip().startswith("  Freie Blöcke: "):
        freeblockline=re.multiline('^Free blocks"\s*:\s*([0-9]+)', gruppeline.strip())[1]
a=open("bitmap.txt", 'a+')
b= 0
try:
  while true:
    ergebnis = blockcount * b
    a.write(ergebnis)
except:
    pass
file.close()
Zuletzt geändert von bluelagoon am Donnerstag 29. September 2011, 08:31, insgesamt 1-mal geändert.
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Nein, eine Endlosschleife endet ja nicht. Du möchtest aber, dass sie endet. Mit "umbauen" meinte ich daher: Du brauchst eine Schleife, die exakt so viele Durchläufe produziert, wie es Blöcke gibt. Da könnte man beispielsweise for in Kombination mit xrange nehmen. Oder ein Konstrukt wie "while a.tell() <= blockcount"... (wobei "a" hier deiner Benennung folgt) .
Und offensichtlich musst du Angaben wie "123-456" erst splitten und dann als Anfang bzw. Endwert eines gegebenen Zahlenbereiches interpretieren. Auch hier eignet sich xrange.

Ansonsten die üblichen Fehler: except ohne Angabe abzufangender Exceptions, open ohne with, Schleife ohne Abbruchbedingung, Beklagen über einen Fehler ohne Angabe des Fehlers. Ferner fragt man sich, warum bei jedem Schleifendurchlauf "ergebnis" berechnet wird - und zwar als Produkt der Zeichenkette "blockcount" und 0. Das macht doch überhaupt keinen Sinn?
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

ich muss erstma an die Angabe von den Freien Blöcken dran kommen das ich damit was machen kann aber richtig funktionieren tut das nicht der Fehler liegt sicher im elif Bereich. dann wäre es doch klüger erst die Freien Blöcke in ein xrange zu werfen und dann die einzutragen statt die ganzen Blöcke?
ich komm mit der 0 einfach nicht klar.
wenn ich angeb a.write(blockcount) dann geb ich ja das auch aus bis 640000 bla bla. warum kann ich net einfach sagen 0 * 640000 mach hin un fertig?!
Zuletzt geändert von bluelagoon am Donnerstag 29. September 2011, 08:37, insgesamt 1-mal geändert.
BlackJack

@bluelagoon: Ich würde sagen da ist mehr als ein Fehler drin. Und der Quelltext ist wieder mal ziemlich umständlich. Dass Du zum Beispiel mal davon wegkommen solltest `re.split()` auf diese Weise zum extrahieren von Werten zu verwenden, wurde Dir schon mindestens einmal nahegelegt.

Du liest mit `readlines()` unnötigerweise die gesamte Datei in den Speicher bevor Du anfängst mit den einzelnen Zeilen zu arbeiten.

Der Name `gruppeline` ist ungünstig gewählt, denn nicht jede Zeile hat etwas mit einer Gruppe zu tun. Die Mischung deutsch/englisch ist auch hässlich.

Die Ausgabe von ``dumpe2fs`` besteht aus zwei Teilen: Erst kommen ein paar Metadaten und dann im Verhältnis dazu *viele* Zeilen mit den Gruppeninformationen. Du liest die gesamte Datei ein und iterierst über *alle* Zeilen, nur um aus dem relativ kurzen Teil am Anfang *einen* Wert zu extrahieren. Es wäre deutlich sinnvoller die Datei zu öffnen und erst die Informationen vor den Gruppen zu verarbeiten und wenn die vorbei sind, dann zum Verarbeiten der Gruppen über zu gehen. Das Kriterium für den Übergang zwischen den beiden Abschnitten ist ja sehr einfach zu testen.

Der erste Teil des Programms mag ja noch halbwegs umständlich funktionieren, aber was dann kommt, da hast Du wieder nicht für 25¢ nachgedacht. Das ist semantisch dera@bluelagoon: Ich würde sagen da ist mehr als ein Fehler drin. Und der Quelltext ist wieder mal ziemlich umständlich. Dass Du zum Beispiel mal davon wegkommen solltest `re.split()` auf diese Weise zum extrahieren von Werten zu verwenden, wurde Dir schon mindestens einmal nahegelegt.

Du liest mit `readlines()` unnötigerweise die gesamte Datei in den Speicher bevor Du anfängst mit den einzelnen Zeilen zu arbeiten.

Der Name `gruppeline` ist ungünstig gewählt, denn nicht jede Zeile hat etwas mit einer Gruppe zu tun. Die Mischung deutsch/englisch ist auch hässlich.

Die Ausgabe von ``dumpe2fs`` besteht aus zwei Teilen: Erst kommen ein paar Metadaten und dann im Verhältnis dazu *viele* Zeilen mit den Gruppeninformationen. Du liest die gesamte Datei ein und iterierst über *alle* Zeilen, nur um aus dem relativ kurzen Teil am Anfang *einen* Wert zu extrahieren. Es wäre deutlich sinnvoller die Datei zu öffnen und erst die Informationen vor den Gruppen zu verarbeiten und wenn die vorbei sind, dann zum Verarbeiten der Gruppen über zu gehen. Das Kriterium für den Übergang zwischen den beiden Abschnitten ist ja sehr einfach zu testen.

Der erste Teil des Programms mag ja noch halbwegs umständlich funktionieren, aber was dann kommt, da hast Du wieder nicht für 25¢ nachgedacht. Das ist semantisch derartig unsinnig… Was bitte hast Du Dir dabei gedacht die Datei im 'a'-Modus zu öffnen? Warum gibst Du der 0 einen Namen? Was soll das ``try``/``except`` ohne konkrete Ausnahme welches einfach alle Ausnahmen ignoriert, zum Beispiel auch den `NameError` den Du da hast: Wo wird `true` an einen Wert gebunden!? Wie viel Daten werden wohl insgesamt geschrieben wenn man in einer Endlosschleife Daten in einer Datei schreibt? Nun ja, *wenn* man das tut. Was erwartest Du wie `ergebnis` aussieht!? Lass Dir das mal ausgeben.

Die Bitmap-Datei wird übrigens nicht geschlossen. Die ``with``-Anweisung wurde Dir auch schon gefühlte 1000 mal nahegelegt.
rtig unsinnig… Was bitte hast Du Dir dabei gedacht die Datei im 'a'-Modus zu öffnen? Warum gibst Du der 0 einen Namen? Was soll das ``try``/``except`` ohne konkrete Ausnahme welches einfach alle Ausnahmen ignoriert, zum Beispiel auch den `NameError` den Du da hast: Wo wird `true` an einen Wert gebunden!? Wie viel Daten werden wohl insgesamt geschrieben wenn man in einer Endlosschleife Daten in einer Datei schreibt? Nun ja, *wenn* man das tut. Was erwartest Du wie `ergebnis` aussieht!? Lass Dir das mal ausgeben.

Die Bitmap-Datei wird übrigens nicht geschlossen. Die ``with``-Anweisung wurde Dir auch schon gefühlte 1000 mal nahegelegt.

PS: Das ``elif`` war noch nicht da, als ich angefangen habe das hier zu schreiben, aber das ist ja auch wieder totaler Unsinn an der Stelle…
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

warum soll elif an der Stelle unsinn sein? ich brauch doch die freien Blöcke sowie die gesamte Blockzahl?! ja ich hab alles geändetr nun und funktioniert trotzdem nicht auch wenn Variablen-werte geändert sind. b=chr(0)
weil man keinen Integer in ne Datei schreiben kann weils Fehler wirft.
theoretisch kann ich Variable auch xyz nennen der Name is egal solang es keine Attribute enthält.
Zuletzt geändert von bluelagoon am Donnerstag 29. September 2011, 08:45, insgesamt 1-mal geändert.
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

???? Erst sagst du nur "es gibt irgendwo einen Fehler", dann heißt es "vermutlich irgendwo im elif-Block"? Wie wäre es bitte mal mit einer qualifizierten Fehlermeldung, wie sie der Python-Interpreter ausspuckt? Da wird ja vermutlich etwas stehen wie:

Code: Alles auswählen

AttributeError: 'module' object has no attribute 'multiline'
, oder?

Wie krass ist es bitte, seine Helfer nach mehr Informationen betteln zu lassen? Außerdem macht es mir echt keinen Spaß, mich durch diese Beiträge mit Großschreib-Lotterie und Punkt/Komma-Anarchismus zu wühlen.

Mittlerweile haben vermutlich mindestens drei Leute hier eine schöne Musterlösung für dein Problem gefunden und warten nur darauf, dass du nur ansatzweise Mitarbeit zeigst, so dass wir unsere Implementierungen miteinander vergleichen und dir damit helfen können.
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

woher soll ich wissen wo der Fehler ist wenn da NICHTS steht bei mir?
soll ich dir nen Screen davon machen das da keine Fehlerangabe is?
man ich versuch hier den Code auf die Reihe zu bekommen und ich bettel nicht um eure Codes?! oder soll ich sagen bitte schreib mir das?
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Du bekommst keinen Fehler, weil dein except-Block ausnahmslos alle Fehler abfängt. Wurde dir doch auch schon ein paar Mal gesagt, dass man das so nicht macht, oder?
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

ja JETZT eben net mehr weil ich ALLES rausgeworfen hab!

Code: Alles auswählen

file = open("file.txt", 'r')
for blockline in file.readlines():
    if blockline.startswith("Block count: "):
        blockcount=re.split('^Block count\s*:\s*([0-9]+)', blockline.strip())[1]
outfile=open("bitmap.txt", 'w+')
outfile.write(blockcount)
outfile.close()
file.close()
hier müsste dann die freien Blöcke rein statt blockcount.

Code: Alles auswählen

for x in xrange(int(blockcount)):
      print x,
und dann noch an die richtige Stelle positionieren, von der Datei mit den 0.
sabram
User
Beiträge: 28
Registriert: Mittwoch 5. Januar 2011, 13:42

vielleicht solltest du lieber nochmal kurz das Tutorial in der Doku durcharbeiten. Alles was du machst sind meiner Meinung nach Basics, die man sich getrost selber beibringen kann.

Außerdem solltest du vielleicht mal über deinen Umgangston nachdenken, den du hier an den Tag legst. Dir wurden soviele Hilfestellungen gegeben die eigentlich nur von dir ignoriert worden.
Zu guter letzt *schnauzt* du die Leute die versuchen dir zu helfen ( bei dem Skript selbst, sowie bei den ersten SChritten zur Eigeninitiative ).

Ich kann dazu nur sagen, Respekt an alle die das so lange mitmachen.

Hier der Link zu der Doku http://docs.python.org/ -> Tutorial -> bei einem vertretbaren Grundwissen erneut qualifizierte Fragen stellen.
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

wo sollte ich was ignoriert haben? ich hab den Code neu. ich hab den ohne Schleifen ich hab sogar schon xrange drin ohne den Wert den ich benötige. Ich hab Datei öffnen und lesen ich hab Splitten das ich nur die Zahl von Block-count bekomm.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

bluelagoon hat geschrieben:ja JETZT eben net mehr weil ich ALLES rausgeworfen hab!
Der Codestand zum Zeitpunkt, als Barabbas seinen Beitrag abgeschickt hat, war noch eine Endlosschleife mit nacktem `except`. Wir können hier auch nur auf Grundlage deiner Informationen arbeiten und nicht immer wissen, wie du vorangekommen bist. Generell macht es den Eindruck, als seien in deinen Augen im Grunde hier alle zu doof, dir das richtig zu erklären. Es ist aber recht offensichtlich, dass vielmehr du selbst dich einfach nur sehr unbeholfen anstellst und deinen Frust darüber an den anderen Leuten auslässt, weil dir die Erklärungen nicht verständlich genug erscheinen. Überleg halt mal, ob es nicht doch an dir liegen könnte, wenn mindestens 5 verschiedene Leute sozusagen mit dir nicht auf gleicher Ebene kommunizieren können. ;)
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

mag sein.
Antworten