Seite 1 von 1
Ausgabe konvertieren
Verfasst: Freitag 30. September 2011, 08:03
von bluelagoon
hi,
hab hier folgenden Code:
Code: Alles auswählen
dumpfile=open('file.txt', 'r')
bit=dumpfile.read()
dumpfile.close()
blocks=', '.join(re.findall('.*?Freie Bl\xc3\xb6cke:\\s*([0-9, -]*)\\s*$', bit, re.I|re.M)).split(', ')
i=0
blocklen = len(blocks)
while i < blocklen:
if not len(blocks[i].strip()):
blocks.pop(i)
blocklen -= 1
continue
if '-' in blocks[i]:
blocks += xrange(int(blocks[i].split('-')[0], 10), int(blocks[i].split('-')[1], 10)+1)
blocks.pop(i)
blocklen -= 1
else:
blocks[i] = int(blocks[i], 10)
i += 1
blocks.sort()
print int(blocks,16)
mit allen Blöcken möchte nun unwandeln das ascii rauskommt habs versucht mit print int(blocks,16)
Fehler:
Traceback (most recent call last):
File "testbit.py", line 38, in <module>
print int(blocks,16)
TypeError: int() can't convert non-string with explicit base
gibts noch ne Möglichkeit?
Re: Ausgabe konvertieren
Verfasst: Freitag 30. September 2011, 08:14
von sparrow
Was meinst du mit ASCII?
Re: Ausgabe konvertieren
Verfasst: Freitag 30. September 2011, 08:16
von bluelagoon
sry ich meinte eig bit
integer to bit converting
will die blocks als bit und dann in Datei schreiben.
Re: Ausgabe konvertieren
Verfasst: Freitag 30. September 2011, 08:19
von sparrow
Das?
Code: Alles auswählen
>>> a = 128
>>> bin(a)
'0b10000000'
>>> b = 0b10000000
>>> b
128
Re: Ausgabe konvertieren
Verfasst: Freitag 30. September 2011, 08:23
von bluelagoon
Beispielblock:
1264184
wenn belegt 1 wenn nicht belegt 0.
file.txt:
Freie Blöcke: 1245184-1277951
also müssten die Blöcke als 0 erscheinen.
Re: Ausgabe konvertieren
Verfasst: Freitag 30. September 2011, 08:26
von sparrow
Du weißt aber, dass das nichts mit deiner Frage hier zu tun hat?!?
Da musst du wohl nachschauen ob die entsprechenden Blöcken in dem Bereich sind und dann einfach eine BYTE Schreiben.
Oder willst du Bits setzen?
Du redest wirr.
Re: Ausgabe konvertieren
Verfasst: Freitag 30. September 2011, 08:27
von bluelagoon
öhm doch weil ich die Blöcke die Ausgabe davon als bit anzeigen muss ^^. Die Ausgabe was ich auswerf von den Blöcken wird als 0 und 1 dargestellt nicht mehr als ganze Zahlen wie bei Windows die Datei $bitmaps und die Ausgabe wird dann in ne Text-Datei geschrieben.
und wie soll ich das sonst schreiben? mit der Hand wäre nicht sinnvoll das ich jeden Block raussuche o.o
Re: Ausgabe konvertieren
Verfasst: Freitag 30. September 2011, 08:40
von sparrow
Code: Alles auswählen
$ echo '10101' > text.txt
$ cat text.txt
10101
$ hexdump text.txt
0000000 3031 3031 0a31
0000006
Ich weiß immer noch nicht was du willst, aber spätestens wenn du etwas in eine Textdatei schreibst sind das sicherlich keine Bits mehr.
Entweder bringst du hier ganz viele Sachen durcheinander (insbesondere Bezeichnungen), oder das ist Raketenwissenschaft. Ich tippe auf ersteres.
Re: Ausgabe konvertieren
Verfasst: Freitag 30. September 2011, 08:48
von BlackJack
@bluelagoon: Was Du da mit der `blocks` Liste verantstaltest ist ziemlich unübersichtlich und auch ineffizient wegen den `pop()`\s. Wenn Du da eine neue Liste mit den konvertierten Ergebnissen aufbauen würdest, könntest Du eine einfache ``for``-Schleife über `blocks` verwenden und die `pop()`\s, das manuelle führen von `i`, und das sortieren am Ende einsparen.
Letztlich skaliert dieser Ansatz aber überhaupt nicht. Eine Liste mit allen freien Blocknummern bei einer heutzutage normalen Partitionsgrösse sprengt locker den Speicher.
Ganz zum Schluss versuchst Du eine *Liste mit Zahlen* mit `int()` in *eine* Zahl umzuwandeln. Das kann natürlich nicht gehen.
Mir ist an der Stelle auch nicht ganz klar was Du da heraus bekommen möchtest? Ich dachte es ging ursprünglich mal um eine Datei mit einem Byte pro Block in dem entweder 0 oder 1 steht!? Das als Datenstruktur im Speicher wäre ja erst einmal auch eine Liste der gleichen Länge wie die (zu lange) Liste mit den freien Blocknummern. Selbst wenn man die Information kompakter speichert, zum Beispiel als `array`- oder `numpy`-Array, sind das immer noch ziemlich grosse Datenmengen.
Ich würde versuchen den Speicherverbrauch möglichst klein zu halten. Dazu müsstest Du Dir mal Funktionen und dort dann auch im Speziellen Generatorfunktionen anschauen. Statt die Datei komplett einzulesen und dann komplett in eine Liste mit freien Blocknummern zu überführen, wäre eine Generatorfunktion, die die freien Blocknummern liefert wesentlich speicherschonender zu implementieren. Etwas schlauer wäre es vielleicht sogar nicht jede einzelne Blocknummer zu liefern, sondern genau wie in der ``dumpe2fs``-Ausgabe Tupel mit den Bereichen von wo bis wo freie Blöcke liegen. Dann muss man nicht jeden freien Block einzeln abarbeiten.
Re: Ausgabe konvertieren
Verfasst: Freitag 30. September 2011, 09:53
von bluelagoon
problem gelöst.
Re: Ausgabe konvertieren
Verfasst: Freitag 30. September 2011, 10:03
von sparrow
Coo, wie?