Seite 1 von 1

SD-Karte ohne FAT auslesen

Verfasst: Samstag 17. Mai 2008, 09:32
von george
Hallo,

das Thema mag vielleicht etwas strange wirken, aber ich stehe vor der Aufgabe unter Windows mit Python eine SD-Karte auszulesen. Auf dieser SD-Karte stehen Messdaten. Diese wurde linear(Sektor für Sektor OHNE FAT[also keine Datei]) hintereinander abgelegt und müssen jetzt zur Datenanalyse am PC gelesen werden. Ich habe im Internet schon ein Beispiel(Visual Basic) gefunden, wo das Auslesen realisiert wird.

Gibt es in Python API`s, mit den man dies auch realisieren kann?

Danke
george

Verfasst: Samstag 17. Mai 2008, 09:55
von audax
Dann zeig doch den VB-Code mal her...
Durch was werden denn deine Dateien getrennt?

Wie du das Gerät `raw` öffnest unter Windows kann ich dir leider nicht sagen, unter Linux aber reicht ein `open('/dev/sdb', 'rb')` ;)

Verfasst: Samstag 17. Mai 2008, 10:03
von george
Moin, moin,

http://staff.ltam.lu/feljc/electronics ... eader.pdf

die Daten liegen in festen Formataufbau vor und werden linear in 512Byte Blöcken geschrieben.

Gruss

Verfasst: Samstag 17. Mai 2008, 10:15
von BlackJack
Für das '/dev/sdX'-Äquivalent unter Windows hatte ich mir mal folgende Seite in die Bookmarks aufgenommen: http://support.microsoft.com/kb/q100027/

Das scheint auch der Weg zu sein, der in dem VisualBasic-Programm gegangen wird.

Verfasst: Samstag 17. Mai 2008, 10:19
von audax
Na dann:

Code: Alles auswählen

from __future__ import with_statement

DEVICE = '/dev/sdb'
LENGTH = 512

with open(DEVICE, 'rb') as dev:
    files = []
    while True:
        part = dev.read(LENGTH)
        if part:
            files.append(part)
        else:
            break
Siehe: Tutorial

Anstatt die Dateien in eine Liste zu packen kanns da natürlich sonstwas mit ihnen tun...

€dit:
So in ordentlich mit Generator:

Code: Alles auswählen

from __future__ import with_statement

DEVICE = '/dev/sdb'
LENGTH = 512

def reader(device, length):
    with open(device, 'rb') as dev:
        while True:
            part = dev.read(length)
            if part:
                yield part
            else:
                break

file_iter = reader(DEVICE, LENGTH)

for part in file_iter:
    do_stuff(part)

Verfasst: Samstag 17. Mai 2008, 10:39
von george
Hallo,

danke, funktioniert.

Gruss