Seite 1 von 1

Schaffe es nicht mal eine Datei zu öffnen.

Verfasst: Dienstag 15. April 2008, 15:05
von DigitalPhoenix
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

Verfasst: Dienstag 15. April 2008, 15:10
von jens

Code: Alles auswählen

file_tab=file(filename,"r")
for line in file_tab:
    print line
[wiki]Von Umlauten, Unicode und Encodings[/wiki]:lol:

Verfasst: Dienstag 15. April 2008, 15:26
von helduel
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 ;-).

Re: Schaffe es nicht mal eine Datei zu öffnen.

Verfasst: Dienstag 15. April 2008, 15:27
von Rebecca
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...

Verfasst: Dienstag 15. April 2008, 15:47
von DigitalPhoenix
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*

Verfasst: Dienstag 15. April 2008, 16:09
von Leonidas
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.