Schaffe es nicht mal eine Datei zu öffnen.

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
DigitalPhoenix
User
Beiträge: 4
Registriert: Dienstag 15. April 2008, 14:45

Hallo, vorab: Ich habe gesucht und alle möglichen Bespiele ausprobiert aber es will nicht in meinen Kopf. Habe vor vielen Jahren in QBasic, Delphi, JavaScript, PHP rumgebastelt und bin einfach aus der Übung.
Vor mir liegt "Python - Grundlagen und Praxis" und "Python Cookbook", was aber noch nicht hilft weil ich es noch nicht schaffe umzudenken.

Ich habe ein "einfaches" Problem: Ich habe CSV Dateien die ich in Tupel zwecks logischer Vergleiche in den Speicher laden will. Nun beinhalten die Dateien leider alles mögliche an printbarem (Äü*/ \$., etc.).
Meine Frage ist: wie "entschärfe" ich den Input?
Meine ersten Versuche scheitern daran dass der Interpreter darüber meckert das ich keine codierung angegeben hätte. Der Code ist kopiert und ich wollte ihn zwecks lernen durcharbeiten nur komm ich nur bis "Zeile 9" mit der Melduing:

File "/home/user/workspace/test1/einlesen.py", line 8
SyntaxError: Non-ASCII character '\xc3' in file /home/user/workspace/test1/einlesen.py on line 8, but no encoding declared;

Hier mein kläglicher Versuch:

Code: Alles auswählen

filename = '/home/user/test/listen/test1.csv'

import string

# Liest die Datei ein
def read_file(filename):
    
    # Separator zwischen Spalten (;)
    separator = u'\u003b'
    file_tab=file(filename,"r")

    # Ueberspringe den Header
    line=file_tab.readline()

    data=[]
    # Liest Zeile für Zeile ein, solange Daten da sind...
    while line!="":
            # row beinhaltet die Werte eine Zeile
            row=[]
            # Verwende das letzte Zeichen von "line" nicht, d.h. line[:-1],
            # da darin der Zeilenumbruch "\n" steht
            for val in string.split(line[:-1],separator):
                # nur nicht-leere Spalten hinzufuegen
                if string.strip(val)!="":
                    row.append(string.strip(val))
            # Baue zweidimensionales Array auf       
            data.append(row)

            # naechste Zeile!
            line=file_tab.readline()

    # schliesst das File
    file_tab.close()

    return data
Ich hoffe falle hier nicht unter die Kategorie "Schüler+Hausaufgaben" :-)
Hat jemand einen kleinen Hinweis für mich? Ich muß mich wieder motivieren und weigere mich Python an den Nagel zu hängen.

Gruß
DP
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Code: Alles auswählen

file_tab=file(filename,"r")
for line in file_tab:
    print line
[wiki]Von Umlauten, Unicode und Encodings[/wiki]:lol:
Zuletzt geändert von jens am Dienstag 15. April 2008, 15:27, insgesamt 1-mal geändert.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Setz mal ein

Code: Alles auswählen

# coding: utf-8
in die erste Zeile.

Außerdem dürfte für dich das csv-Modul interessant sein ;-).
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

DigitalPhoenix hat geschrieben: File "/home/user/workspace/test1/einlesen.py", line 8
SyntaxError: Non-ASCII character '\xc3' in file /home/user/workspace/test1/einlesen.py on line 8, but no encoding declared;
Du hast Umlaute in deinem Quelltext, d.h. die Datei wird beim Speichern kodiert, und Python weiss nicht, wie. Je nachdem, in was fuer einem Encoding du die Datei speicherst, packst du oben in den Quelltext sowas wie

Code: Alles auswählen

# -*- coding: utf-8 -*-
oder

Code: Alles auswählen

# -*- coding: iso-8859-1 -*-
Genaueres findest du hier: [wiki]Von Umlauten, Unicode und Encodings[/wiki]

Ausserdem gibt es ein csv-Modul...
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
DigitalPhoenix
User
Beiträge: 4
Registriert: Dienstag 15. April 2008, 14:45

Ich danke für die rege Beteiligung.

Also das mit dem

Code: Alles auswählen

# -*- coding: utf-8 -*-
hatte ich mir fast schon gedacht. Mich hat nur am Anfang der Zeile irritiert.
Dachte das gelte nur für Kommentare. :-)
Jetzt bekomme ich zwar noch keine Ausgabe aber das heißt auch kein gemecker mehr - weiter geht's!

Ich Danke.

PS: CSV Modul. Jupp von gelesen. Ich wollte nur die ersten Steps mal selber nachvollziehen bevor ich anfange auf Module zu bauen.


Nachtrag zur Ausgabe: Eine Funktion zu schreiben und sie dann nicht aufzurufen - das nenn ich gekonnt. *deppert*
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

DigitalPhoenix hat geschrieben:Dachte das gelte nur für Kommentare. :-)
Das sind ja auch nur Kommentare. Dafür sind es magische Kommentare, die tatsächlich etwas ändern.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten