wczytanie pliku do tablicy z delimiterem w pythonie

Odpowiedz Nowy wątek
2011-09-04 20:23
0

Witam

Z programowaniem nie mam nic wspólnego, ale trafiło się, że muszę coś napisać. Na innym forum polecono mi to forum i pythona, jako najłatwiejszy z języków.

Chcę wczytać plik który wygląda tak:

2083,2112,2076,2112,1797,4581
2138,2180,2127,2147,2429,4954
2106,2150,2104,2125,2513,5319
2122,2178,2122,2177,2111,4845
2260,2273,2233,2243,4074,4955
2188,2194,2152,2170,4259,4936
2150,2162,2130,2134,5176,4694
2125,2172,2107,2171,5224,4801
2259,2321,2258,2305,5675,4918
2413,2453,2397,2407,5831,5421
2333,2393,2273,2365,5994,5622
2338,2367,2333,2353,4316,5917
2433,2471,2416,2458,5178,6033
...

do tablicy jako liczby typu double float, nie jako wyrazy czy inty

Proszę o pomoc

edytowany 2x, ostatnio: elorap, 2011-09-04 20:24

Pozostało 580 znaków

2011-09-04 20:45
0

Nie znam Pythona ale Google mówi tak:

import csv
 
data = csv.reader(open('your_file.txt'), delimiter = ',')
for row in data:
    row = [float(x) for x in row] # czy to zadziała to pewien nie jestem
edytowany 1x, ostatnio: hauleth, 2011-09-04 22:02

Pozostało 580 znaków

2011-09-04 21:20
0

Albo na piechotkę, bez csv'a:

file, array = open('liczby.txt', 'r'), []
 
for line in file:
    array.append((line.strip()).split(','))
 
array = [map(float,x) for x in array]

winerfresh:

for row in data: # tu by się jednak przydał dwukropek

A to trzeba by jednak trochę zmodyfikować, żeby móc korzystać z tablicy:

import csv
 
array = []
data = csv.reader(open('liczby.txt'), delimiter = ',')
 
for row in data:
    array.append([float(x) for x in row])

edytowany 1x, ostatnio: madmike, 2011-09-04 21:44

Pozostało 580 znaków

2011-09-04 21:50
0

dzięki!

Znalazłem jeszcze coś takiego

with open('dane.csv') as plik:
    tab = [map(float, wiersz.split(' ')) for wiersz in plik]

na
http://pl.python.org/forum/index.php?topic=1633.0

nie chcę być upierdliwy, ale jak chcę wypisać na wyjście to dostaję coś w stylu

map object at 0x027EFE90> <map object at 0x027EFEF0> <map object at 0x027EFF50>

Pozostało 580 znaków

2011-09-04 21:57
0

Masz kolejne liczby oddzielane ,, a próbujesz podzielić wiersz oddzielony znakiem spacji - zmień tak, żebyś miał parametr w split ustawiony na przecinek a nie spację:

with open('liczby.txt') as plik:
    tab = [list(map(float, wiersz.split(','))) for wiersz in plik]

edytowany 1x, ostatnio: madmike, 2011-09-04 22:11

Pozostało 580 znaków

2011-09-04 22:13
0

był ',' przekopiowałem po prostu z tamtego forum, nie z programu. Cały czas mam
<map object at 0x02609B70>, <map object at 0x02609C90>, <map object at 0x02609DB0>, <map object at 0x02609ED0>, <map object at 0x02609FF0>, <map object at 0x0260A130>, <map object at 0x0260A250>

wygooglałem coś takiego
http://stackoverflow.com/ques[...]o-return-a-list-in-python-3-1

ehhh, ten python miał być prosty ;(

Pozostało 580 znaków

2011-09-04 22:18

python jest prosty, o ile zna się podstawy...

Jak mi ktoś zwrócił uwagę, używasz pythona 3.x, więc musisz trochę poprawić ten kod - zobacz w powyższym poście pojawiła się dodatkowo instrukcja list - i ona tam musi być. Przekopiuj ten kod i sprawdź:

with open('liczby.txt') as plik:
    tab = [list(map(float, wiersz.split(','))) for wiersz in plik]
 
print(tab)

powinno wydrukować tablicę:
[[2083.0, 2112.0, 2076.0, 2112.0, 1797.0, 4581.0], [2138.0, 2180.0, 2127.0, 2147.0, 2429.0, 4954.0], [2106.0, 2150.0, 2104.0, 2125.0, 2513.0, 5319.0], [2122.0, 2178.0, 2122.0, 2177.0, 2111.0, 4845.0], [2260.0, 2273.0, 2233.0, 2243.0, 4074.0, 4955.0], [2188.0, 2194.0, 2152.0, 2170.0, 4259.0, 4936.0], [2150.0, 2162.0, 2130.0, 2134.0, 5176.0, 4694.0], [2125.0, 2172.0, 2107.0, 2171.0, 5224.0, 4801.0], [2259.0, 2321.0, 2258.0, 2305.0, 5675.0, 4918.0], [2413.0, 2453.0, 2397.0, 2407.0, 5831.0, 5421.0], [2333.0, 2393.0, 2273.0, 2365.0, 5994.0, 5622.0], [2338.0, 2367.0, 2333.0, 2353.0, 4316.0, 5917.0], [2433.0, 2471.0, 2416.0, 2458.0, 5178.0, 6033.0]]

BTW: najnowszy, nie znaczy najlepszy. Python 3 to wciąż daleka przyszłość, ściągnij sobie Python 2.7.2, będziesz miał mniej problemów :]


edytowany 1x, ostatnio: madmike, 2011-09-04 22:21

Pozostało 580 znaków

2011-09-04 22:29
0

ok, dzięki wielkie, zobaczę tego 2.7
i zacznę jednak od jutra z manualem

jeszcze tylko jak odwołac się do konkretnej komórki w tej tablicy? listy list?

Pozostało 580 znaków

2011-09-04 22:33
1

Znajdź sobie jakiś kurs (masa tego jest w internecie) plus manual, bo inaczej się nie da :]

Odwołujesz się tak samo jak do tablicy w innych językach, w tym przypadku sprawdź sobie taki kod:

print(tab[0][1])
liczba = tab[2][3]
print(liczba)

Pozostało 580 znaków

2011-09-04 22:43
0

piękne dzięki

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0