2008-11-01, 11:07
  #1
Medlem
Jag har problem med ett program jag skriver i python, där jag hämtar in ord från en textfil och sen skriver ut dem. Detr problemet jag får är att orden inte skrivs ut med åäö utan med konstiga tecken, och jag tycks inte kunna lösa det på egen hand!
Koden ser ut såhär:

Kod:
wordlist = open("words.txt", "r")
words = [unicode(x.strip(), "cp1251") for x in wordlist.readlines()]
print words
Texten som skrivs ut ser ut såhär:
[u'd\u0435n', u'mur', u'aga', u'mur', u'jag', u'v\u0434n', u'arg', u'ini', u'ull', u'nio', u'lov', u'hes', u's\u0446t', u'aga', u'bad', u'v\u0434v', u'v\u0434v', u'lov', u'd\u0435n', u'\u0435la', u't\u0435a']

Nån aning om vad som kan vara fel? varför är det ett u framför alla ord?!

Orden är en mängd slumpade ord på tre bokstäver.

Tack på förhand!
Citera
2008-11-01, 11:33
  #2
Medlem
Löst! Jag ändrade "cp1251" till "iso5589_1"
Citera
2008-11-01, 11:39
  #3
Medlem
Ta inte det här som 100%-ig lösning, men prova med "UTF-8" istället för "cp1251"..? Det ser ut som någon slags oönskad ANSI-omvandling.

Det kan vara så att det blir fel för att din kod kanske "tvingar på" Code Page 1251-formatet på filerna du öppnar... när de kanske är sparade i annat format (UTF-8 är standard på många nyare system).

Du kan ju också prova att spara en textfil i "det gamla formatet" explicit ("cp1251"), och kör skriptet på den för att se om det ser normalt ut då.

Lite tankar bara.

EDIT: Där ser man..
__________________
Senast redigerad av Zeroes & Ones 2008-11-01 kl. 11:41. Anledning: OK, det var nåt åt det hållet..
Citera
2008-11-06, 01:00
  #4
Medlem
str(list) är inte "str(x) for x in list" med [] runt. för list anropar inte str för alla objekt utan verkar lösa det på nått eget sätt (har fått för mig att den använder __str__ i object). så för att få en bra lösning ska du skriva ut alla element i listan istället för själva listan. u"foo" betyder btw att det är en unicode-sträng.
Citera
2008-11-06, 14:12
  #5
Medlem
Aardwarks avatar
Citat:
Ursprungligen postat av Phreak
Löst! Jag ändrade "cp1251" till "iso5589_1"
Är allt löst nu? För övrigt kanske du menar iso8859-1?

För att sätta encodingen för python-filen kan du skriva (så tidigt som möjligt, dvs första eller andra raden).

#coding: iso8859-1

Den kommentaren kan se ut på många sätt efter som den "regexpas" men det där är ett av sätten.
Citera
2008-11-06, 18:07
  #6
Medlem
Citat:
Ursprungligen postat av Aardwark
Är allt löst nu? För övrigt kanske du menar iso8859-1?

För att sätta encodingen för python-filen kan du skriva (så tidigt som möjligt, dvs första eller andra raden).

#coding: iso8859-1

Den kommentaren kan se ut på många sätt efter som den "regexpas" men det där är ett av sätten.
visserligen är det korrekt att använda codingkommentaren i början på filen men nu gällde det ju en parameter till unicode() som inte nödvändigtvis har nått att göra med kodningen på filen.
__________________
Senast redigerad av tacgnol 2008-11-06 kl. 18:11.
Citera
2008-11-07, 09:02
  #7
Medlem
Såhär blev lösningen tillslut!

Kod:
words = [unicode(x.strip(), "iso8859_1") for x in open("words.txt","r").readlines()]
sen en for-loop som matar ut allt. Det tycks som att det inte spelar någon roll om man använder underline eller bindestreck, mitt exempel fungerar utmärkt!

Tack för all hjälp, det uppskattas verkligen att få hjälp som nybörjare
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in