Wpis z mikrobloga

Może ktoś pomoże...
Program pisany przeze mnie w pythonie wywala sie, gdy w zasysanej linijce (linechache.getline) pojawiaja sie polskie znaki (ą, ę, ć). Teoretycznie zmienilem kodowanie pliku z danymi do utf 8, ale nie ma zmian (jak zastapie ww znaki bezogonkowcami, to dziala). Mam gdzies w programie deklarowac jakie jest kodowanie pliku (bo kodowanie uzywane w programie to wiem, ze deklaruje sie na początku)? I tak, niespecjalnie umiem w programowanie :P
#programowanie #python
  • 23
@less_is_more:
kod:
#!/usr/bin/env python
# -*- coding: utf 8 -*-
import linecache

print ("hhhh")
tekst1 = linecache.getline('daneutf8.txt', 37)
# tekst1 = unicode(tekst)
# tekst2 = str(linecache.getline('dane2.txt', 3))
'''

czasTrwania = int(tekst2[1:3]) * 3600 + int(tekst2[4:6]) * 60 + int(tekst2[7:9]) - (int(tekst1[1:3]) * 3600 + int(tekst1[4:6]) * 60 + int(tekst1[7:9]))
'''
print tekst1

# print tekst2
# print len(tekst2)
dlugosc = len(tekst1)
print ("Dlugosc wiersza wynosi: " + str(dlugosc))
# print czasTrwania
@less_is_more: moment, wyslalo sie zanim poczyscilem zbedne linijki...
kod:
#!/usr/bin/env python
# -- coding: utf 8 --
import linecache

tekst1 = linecache.getline('dane.txt', 37)

print tekst1

dlugosc = len(tekst1)
print ("Dlugosc wiersza wynosi: " + str(dlugosc))

for i in range(dlugosc):
print str(i) + " " + tekst1[i]

Plik (a raczej linijka, na ktorej sie wywala):
P Nie mogę zasnąć Marcelina
@thomeq: getline z linecache rzuca pusty string w przypadku błędów, więc pewnie coś nie halo z plikiem (w ogóle nie wczytuje, linijka nie istnijeje lub jest putsa). Musiałbyś też pokazać plik, na którym operujesz.
@gofr: wygodniej jest jak tu wkleje linijke na ktorej wie wywala (bo jak wskaze w getline inna, to dziala), czy jakos pokazac caly plik (jest dluuuugi :) )?
@thomeq: no spróbuj z jedną linijką, jeśli masz tam jakieś dane, którymi nie chcesz się chwalić. Tylko wrzuć to w kod. Edit: jeśli masz tam białe znaki, to lepiej linijka na gista lub pastebin
@thomeq: w ogóle - na pewno potrzebujesz linecache? Jeśli masz zamiar wczytywać zawartość pliku, linijka po linijce, to lepiej wykorzystaj interfejs z biblioteki io. Tutaj przykład:

with io.open('daneutf8.txt', 'r', encoding='utf-8') as template:
____for line in template:
________print line
@gofr: NIe, nie potrzebuje po prostu ta metoda wydawala mi sie najprostsza :) Jak pisalem na poczatku newbie jestem ;)
Na pewno musze móc wczytywac kolejne linijki w petli, a w nich skakac po pozycjach i odczytywac konkretne rzeczy :)
@thomeq: panie, u mnie działa. Kto panu to tak #!$%@?ł?

> cat lol.txt
18:13:57 PLY 05 F015578P Nie mogę zasnąć Marcelina BLK
18:13:57 PLY 05 F015578P Nie moge zasnac Marcelina BLK

In [1]: import linecache
In [2]: linecache.getline('lol.txt', 1)
Out[2]: ' 18:13:57 PLY 05 F015578P Nie mog\xc4\x99 zasn\xc4\x85\xc4\x87 Marcelina BLK\n'

In [3]: linecache.getline('lol.txt', 2)
Out[3]: ' 18:13:57 PLY 05 F015578P Nie moge zasnac Marcelina BLK\n'

Spróbuj metodą na warszawskiego cwaniaczka, czyli