2012-03-25 10 views
6

Mam plik w poniższym formacie:Python odczytuje ciąg znaków z pliku i podzielić ją na wartości

995957,16833579 
995959,16777241 
995960,16829368 
995961,50431654 

chcę czytać w każdym wierszu, ale podzielenie wartości w odpowiednich wartościach. Na przykład pierwsza linia zostanie podzielona na:

x = 995957 
y = 16833579 

Od momentu ciąg kiedy czytasz go i chcę, aby przekonwertować je na int i rozdzielić je, jak dokładnie bym za to zabrać? Każda pomoc będzie doceniona.

Dzięki!

+0

Jaki kod próbowałeś do tej pory? –

Odpowiedz

14

Coś takiego - dla każdej linii do odczytu ciąg zmiennej a:

>>> a = "123,456" 
>>> b = a.split(",") 
>>> b 
['123', '456'] 
>>> c = [int(e) for e in b] 
>>> c 
[123, 456] 
>>> x, y = c 
>>> x 
123 
>>> y 
456 

Teraz możesz robić to, co jest konieczne ze x i y przydzielane, które są liczbami całkowitymi.

+0

'map (int, a.split (", "))' jest fajne –

1
>>> [[int(i) for i in line.strip().split(',')] for line in open('input.txt').readlines()] 
[[995957, 16833579], [995959, 16777241], [995960, 16829368], [995961, 50431654]] 
10

Do plików należy używać open(file, mode). Tryb jest odmianą "r" dla odczytu, "w" dla zapisu, i ewentualnie "b" dołączonego (np. "Rb") do otwierania plików binarnych. Zobacz link poniżej.

Użyj open z readline() lub readlines(). Pierwsza z nich zwróci linię naraz, a druga zwraca listę linii.

Użyj split(delimiter), aby podzielić na przecinek.

Na koniec musisz rzucić każdą pozycję na liczbę całkowitą: int(foo). Prawdopodobnie będziesz chciał otoczyć swoją klatkę blokiem try, a następnie except ValueError, jak w poniższym linku.

Można również użyć 'wielokrotnego przypisania' przypisać aib naraz:

>>>a, b = map(int, "2342342,2234234".split(",")) 
>>>print a 
2342342 
>>>type(a) 
<type 'int'> 

python io docs

python casting

+0

Świetna odpowiedź ... –

14

chciałbym zrobić coś takiego:

filename = "mynumbers.txt" 
mynumbers = [] 
with open(filename) as f: 
    for line in f: 
     mynumbers.append([int(n) for n in line.strip().split(',')]) 
for pair in mynumbers: 
    try: 
     x,y = pair[0],pair[1] 
     # Do Something with x and y 
    except IndexError: 
     print "A line in the file doesn't have enough entries." 

Otwarte jest zalecane w http://docs.python.org/tutorial/inputoutput.html s Dzięki temu upewnia się, że pliki są poprawnie zamknięte, nawet jeśli podczas przetwarzania zostanie zgłoszony wyjątek.

Powiązane problemy