SD-Karte ohne FAT auslesen

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
george
User
Beiträge: 109
Registriert: Mittwoch 11. Januar 2006, 20:28
Wohnort: Berlin

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
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

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')` ;)
george
User
Beiträge: 109
Registriert: Mittwoch 11. Januar 2006, 20:28
Wohnort: Berlin

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
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.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

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)
george
User
Beiträge: 109
Registriert: Mittwoch 11. Januar 2006, 20:28
Wohnort: Berlin

Hallo,

danke, funktioniert.

Gruss
Antworten