String in Byte teilen

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
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Mittwoch 30. August 2006, 14:16

Hi

Weiß jemand wie ich einen string in zb. 32 byte Teile teilen kann und die dann in eine liste speichern kann, oder noch besser immer 32 byte von einem string einlesen wie bei

Code: Alles auswählen

asd = file("asd.asd", "r")
while 1:
    asd.read(32)
Ich hoffe das geht so einfach :wink:

MfG,
Craven
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
Gromit
User
Beiträge: 51
Registriert: Montag 8. Mai 2006, 19:07

Mittwoch 30. August 2006, 15:19

Und ein weiterers Kaptiel von "Gromit liest aus dem Python-Manual":

read( [size])
Read at most size bytes from the file (less if the read hits EOF before obtaining size bytes).
Quelle:
http://docs.python.org/lib/bltin-file-o ... ml#l2h-242[/quote]
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Mittwoch 30. August 2006, 15:41

Ähm read ist doch genau das was ich oben geschrieben hab.
Ich wollte fragen ob sowas in der art auch mit nem string geht

MfG,
Craven
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Mittwoch 30. August 2006, 15:59

Hi

Schau dir mal das Modul StringIO an. Da kannst du ein String genau wie eine Datei ansprechen.

Gruss
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Mittwoch 30. August 2006, 16:04

Ah danke das klingt super, ich werds mir gleich mal anschaun.

MfG,
Craven
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Mittwoch 30. August 2006, 16:19

Oder auch

Code: Alles auswählen

>>> S = "abc bla bla bla foo bar baz" * 100
>>> l = [ S[i:i+32] for i in xrange(0, len(S), 32) ]
>>> l
['abc bla bla bla foo bar bazabc b',
 'la bla bla foo bar bazabc bla bl',
 'a bla foo bar bazabc bla bla bla',
 ' foo bar bazabc bla bla bla foo ',
...
>>> # oder auch als iterator:
>>> it = ( S[i:i+32] for i in xrange(0, len(S), 32) )
>>> for s in it:
...  print s
abc bla bla bla foo bar bazabc b
la bla bla foo bar bazabc bla bl
a bla foo bar bazabc bla bla bla
 foo bar bazabc bla bla bla foo
...
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 30. August 2006, 16:23

Craven hat geschrieben:noch besser immer 32 byte von einem string einlesen
[...]
Ich hoffe das geht so einfach
Hi Craven!

Das sollte so einfach funktioniere:

Code: Alles auswählen

my_list = []
f = file("dateiname", "rb")
try:
    while True:
        part = f.read(32)
        if part == "":
            break
        my_list.append(part)
finally:
    f.close()
Wie der Text in der Textdatei aufgebaut ist und was du mit den Zeilenumbrüchen machst, weiß ich allerdings nicht. --> zu wenig Infos von dir.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Mittwoch 30. August 2006, 16:38

Hi

danke für die antworten. Hat mit StringIO funktioniert.

@ Gerold:
Ich wollte einen string an sich ansprechen, also keine Datei.

MfG,
Craven
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
Antworten