2012-04-03 7 views
0

Ich habe um gesucht, und hatte kein Glück bei der Suche etwas meine Frage zu beantworten.Text lesen und eine Klasse Daten in Python Zuweisung

Im Grunde habe ich eine Datei mit den folgenden Daten:

Title - 19 
Artist - Adele 
Year released - 2008 
1 - Daydreamer, 3:41, 1 
2 - Best for Last, 4:19, 5 
3 - Chasing Pavements, 3:31, 7 
4 - Cold Shoulder, 3:12, 3 

Title - El Camino 
Artist - The Black Keys 
Year released - 2011 
1 - Lonely Boy, 3:13, 1 
2 - Run Right Back, 3:17, 10 

EOF 

Ich weiß, wie Klassen zu erstellen, und wie ein Objekt zu einer Klasse und Werten für das Objekt zugewiesen werden, aber ich bin jetzt bereit zu Reiß dir die Haare aus, wie es ist, ich soll den Text verarbeiten. Aus Text muss ich einen Titel für das Album erstellen und ihm die Informationen des Albums zuweisen. Es gibt noch mehr als das, was getan werden muss, und es gibt mehr Zeilen, die gelesen werden müssen, und ich weiß einfach nicht, wo ich anfangen soll. Ich habe zwei "album.py" -Dateien über Google gefunden, und ich war nicht in der Lage, Kopf oder Zahl davon zu machen, wie ich die Lösung auf meinen Fall anwenden könnte.

Und ja, ist dies für eine Schulaufgabe. Ich habe etwas gegraben und einige Dinge für relevant befunden, aber ich verstehe es einfach nicht. Ich bin neu in der Programmierung im Allgemeinen, und ich habe Fortschritte gemacht, aber das scheint zu weit über meinen Kopf.

Ich weiß, dass ich diese Listen reduzieren könnte unter Verwendung von Split (\ n \ n), die auf einer Reihe von zunehmend kleineren Listen, aber ich versuche, diese Methode um jeden Preis zu vermeiden.

EDIT:

Zur Zeit ist es am besten weiß ich nichts zu übernehmen. Obwohl, um unten die Frage zu beantworten: Ich kann die Datei öffnen und es lesen. Wenn es sich um eine konsistente CSV-formatierte Datei handelt, kann ich Code schreiben, um die eingeschlossenen Daten zu verarbeiten, und eine Klassenstruktur erstellen, die diese Daten verwendet. Im Moment habe ich nur Probleme mit den ersten drei Zeilen und den Ziffern unmittelbar darunter.

4. April 2012:

Okay, ich habe einige Code, habe ich die Kommentare in Bezug auf sie unterhalb links.

def getInput(): 
    global albums 
    raw = open("album.txt","r") 
    infile = raw 
    raw.close 
    text="" 
    line = infile.readline() 
    while (line != "EOF\n"): 
     text += line 
     line=infile.readline() 
    text=text.rstrip("\n\n") 
    albums=[str(n) for n in text.split("\n\n")] 
    return albums 


class Album(): 
    def __init__(self, title, artist, date): 
     self.title=title 
     self.artist=artist 
     self.date=date 
     self.track={} 

    def addSong(self, TrackID, title, time, ranking): 
     self.track+={self} 

    def getAlbumLength(self): 
     asdf=0 
    def getRanking(self): 
     asdf=0 

def labels(x): #establishes labels per item to be used for Album Classifier 
    title="" 
    artist="" 
    date="" 

    for i in range(0,len(albums),1): 
     sublist=[str(n) for n in albums[i].split("\n")] 
     RANDUMB=len(albums[i]) 
     title=sublist[0] 
     artist=sublist[1] 
     date=sublist[2] 

     for j in range(0,len(sublist),1):     
      song_info = [str(k) for k in sublist[3:].split("," and " - ")] 
      TrackID=song_info[0] 
      title=song_info[1] 
      time=song_info[2] 
      ranking=song_info[3] 

getInput() 
labels(albums) 

Persönliche Kommentare zu Code: Ich habe versucht, bekommt es in Listen zu vermeiden, weil ich dieses Problem erwartet. Was die Funktionen angeht, muss ich jeden einzelnen blutigen verwenden, weil es in den Aufgabenanforderungen liegt ... Ich bin unzufrieden, weil ich wahrscheinlich mit ihnen umgehen könnte. Der Code funktioniert ausreichend, außer für den letzten Teil, in dem ich versuche, die Song-Informationen aufzunehmen. Ich möchte die Liedinformationen in Listen aufteilen, die in die Albuminformationsliste geschachtelt sind. So etwas wie:

Der aktuelle Code gibt mir Index außerhalb des Bereichs Fehler ab sofort ... Ich benutze python3.

TLDR: Der Stoff meines Problems somit von einem Versuch geändert hat zu lösen, wie etwa Start die Lösung zu gehen, wie Elemente in einer Liste zu nehmen und sie in verschachtelten Listen konvertieren.

+3

Vielleicht könntest du das, was du hast, posten? Mit welchem ​​Teil hast du gerade Probleme? Öffnen einer Datei zum Lesen? Wie liest man Zeilen aus einer Datei? Wie erstelle ich die Albumklasse? Wie weise ich einer Klassenvariablen einen Wert zu? – fitzgeraldsteele

+0

Warum haben Sie Angst, auf Listen zu teilen? '\ n \ n' ist der * einzige * Abgrenzer, den ich bis jetzt sehen kann. Wenn Sie sich nicht auf zwei neue Zeilen aufteilen, wie werden Sie den Anfang eines Objekts und das Ende eines anderen markieren? – mvanveen

Antwort

0

Wenn Sie Ihre Frage am Ende der Bearbeitung einige spezifischere Beispiele enthalten, was Sie Probleme schenkt, werde ich diese Antwort bearbeiten. Um jedoch Ihre allgemeine Frage zu beantworten, sind einige Schritte erforderlich, um Ihr Ziel zu erreichen.

  1. Wie Sie bereits gesagt haben, müssen Sie eine Klasse schreiben, die die Struktur widerspiegelt, die Sie aus diesen Daten erhalten möchten.
  2. Sie müssen diese Datei vermutlich Zeile für Zeile analysieren. Sie müssen also feststellen, ob dieses Dateiformat konsistent ist.Wenn dies der Fall ist, müssen Sie Folgendes ermitteln:
    1. Was ist der Begrenzer zwischen den einzelnen Datensätzen, die in einer Klasseninstanz übereinstimmen?
    2. Was ist der Begrenzer zwischen jedem Feld jeder Zeile?

Wenn Sie über jeder Zeile Looping, werden Sie wissen, dass Sie ein neues Album Objekt starten müssen, wenn Sie eine leere Zeile zu begegnen.

Wenn Sie wissen, dass Sie ein neues Album beginnen, können Sie davon ausgehen, dass die erste Zeile ein Titel sein, der zweite ein Künstler, der dritte, dem Jahr, usw.

Für jede dieser Linien werden Sie müssen auch Regeln haben, wie man jeden in die gewünschten Daten aufteilt. Auf einer grundlegenden Ebene kann es ein einfacher Satz von Splits sein. Auf einer höheren Ebene können Sie für jeden Linientyp reguläre Ausdrücke definieren.

+0

@ jdi danke, das ist, was ich gesucht habe. Ich möchte nicht zu viele Informationen hinzufügen, um der Tatsache Rechnung zu tragen, dass ich keine Annahmen über das mache, was ich weiß, weil ich falsch liegen könnte. Mein Problem ist genau, dass ich keine Ahnung habe, wie man die Daten aufteilt. Ich nehme an, es ist über .split ("\ n \ n"). Ich nehme an, ich würde nur den Haupttext vor dem eigentlichen Titel/Künstler/Jahr strippen, aber selbst das weiß ich nicht zu verarbeiten. Ich würde meinen Code anbieten Ich würde Ihnen meinen Code zeigen, aber alles, was ich bis jetzt mache, liest die Datei, speichert die Daten und schließt die Datei. –

+0

@T_Poda: Sie sollten nicht alle Daten gleichzeitig lesen müssen. Überstreichen Sie es zeilenweise und ändern Sie Ihren "Zustand", während Sie gehen. Wenn Sie eine Leerzeile drücken, wissen Sie, dass Sie eine neue Zeile erstellen müssen. Wenn Sie einen Code veröffentlichen, werde ich ihn kommentieren. – jdi

Verwandte Themen