Följ Black Week på SweClockers

Python - Problem att läsa in lista

Permalänk
Medlem

Python - Problem att läsa in lista

Hej!

jag har fastnat på ett säkert väldigt lätt problem men skulle uppskatta eran hjälp ändå.
Jag ska skapa en lista från en textfil som ser ut som följande

Format: datum, börskurs
Ericsson
02-08-01 7.15
02-08-02 6.72
02-08-05 5.56
Electrolux
02-08-01 167.50
02-08-02 165.50
02-08-05 154.00
AstraZeneca
02-08-01 339.50
02-08-02 360.50
02-08-05 353.00

Den första raden vill jag inte läsa in och sedan vill jag ha datum för ericsson som ett element och kursen som ett annat element osv för det andra aktierna.
Hur går jag tillväga med detta?

Tack på förhand

* Rubrik förtydligad //Mod *

Permalänk
Medlem
Skrivet av gustisok:

Hej!

jag har fastnat på ett säkert väldigt lätt problem men skulle uppskatta eran hjälp ändå.
Jag ska skapa en lista från en textfil som ser ut som följande

Format: datum, börskurs
Ericsson
02-08-01 7.15
02-08-02 6.72
02-08-05 5.56
Electrolux
02-08-01 167.50
02-08-02 165.50
02-08-05 154.00
AstraZeneca
02-08-01 339.50
02-08-02 360.50
02-08-05 353.00

Den första raden vill jag inte läsa in och sedan vill jag ha datum för ericsson som ett element och kursen som ett annat element osv för det andra aktierna.
Hur går jag tillväga med detta?

Tack på förhand

Har du tänkt något själv? Hur ser ditt försök ut?

Permalänk
Medlem
Skrivet av dabman:

Har du tänkt något själv? Hur ser ditt försök ut?

Jag har skrivit denna kod men den är hårdkodad och skriver endast ut

---Teknisk analys för Ericsson
02-08-01 7.15
02-08-02 6.72

vilket inte är allt som filen innehåller under aktien ericsson

Koden (rätt lång):

class teknisk(object): def __init__(self): self.foretag = None self.datum = None self.kurs = None def __str__(self): s = "---Teknisk analys för " + self.foretag s += self.datum s += self.kurs return s #Funktion som läser in textfilen Kurser och tar bort första raden def inlasFunktion2(textfil): with open(textfil) as t: lista = t.readlines()[1:] #Skapar en lista med rätt element för den tekniska analysen Kurslista = [] Alista = lista[0:68] Blista = lista[68:135] Clista = lista[136:] Kurslista.append(Alista) Kurslista.append(Blista) Kurslista.append(Clista) return(Kurslista) #Här skapar vi själva listan för den fundamentala analysen def skapaTekniskLista(Kurslista): TekniskLista = [] for elements in Kurslista: aktie = teknisk() aktie.foretag = elements[0] aktie.datum = elements[1] aktie.kurs = elements[2] TekniskLista.append(aktie) return TekniskLista #Huvudprogrammet def main(): Kurslista = inlasFunktion2("kurser.txt") TekniskLista = skapaTekniskLista(Kurslista) print(TekniskLista[0]) main()

Redigerade in [code]-taggar (Python är rätt hopplöst att läsa utan dessa).
Permalänk
Medlem

Jag är inte helt hundra på exakt hur du vill ha det, men här kommer ett försök funktion som läser in datan från filen och lägger den smidigt i en dictionary, med nyckeln satt till företaget och sedan en lista av tuples med alla datum. Funktionen för att skriva ut skriver egentligen bara ut den lagrade listan precis som den lästes in.

Informationen sparas enligt följande struktur:

{'Ericsson' : [(02-08-01, 7.15), (02-08-02, 6.72), (02-08-05, 5.56)], 'Electrolux' : ...

Koden (hoppas den är kommenterad ordentligt, annars är det bara fråga):

from datetime import datetime def parse_file(file): with open(file) as f: content = f.readlines() current_company = None stock_data = {} for line in content: # strip() - Tar bort radbrytningstecken. # split() - Delar upp strängen vid mellanslag formatted_line = line.strip().split(' ') # Försök parsea koden som ett datum, om det går är det ett datum, annars namnet på ett företag. try: # Om det går att parsea som datum, spara en tupel i dictionaryn för företaget: (datum, pris) datetime.strptime(formatted_line[0], '%y-%m-%d') stock_data[current_company].append((formatted_line[0], formatted_line[1])) except ValueError: # Här kommer du hamna när det inte går att parsea den första biten av strängen som ett datum, # sätt då aktuellt företag till den inlästa raden. current_company = ' '.join(formatted_line) stock_data[current_company] = [] return stock_data def print_data(stock_data): for company in stock_data: print("Teknisk analys för {}".format(company)) for date_price in stock_data[company]: print("{}, {}".format(*date_price)) def main(): stock_data = parse_file('kurser.txt') print_data(stock_data) if __name__ == "__main__": main()