2013-08-13 3 views
1

Я пытаюсь разобрать файл. В настоящее время, у меня есть этот файл:Разбор с Python

word1 52345325 
word2 12312314 
word3 7654756 
word4 421342342 

Я пытающийся хранить word1word2word3 и word4 в массив и число смежного с этими словами в другой массив.

Так что, если я говорю a[0] я должен получить word1, и если я говорю b[0] я должен получить 52345325 и так далее.

Я думал о создании ключевого словарного словаря, но это может быть немного сложным на данный момент, поскольку я просто попадаю в python.

В настоящее время я делаю это, но, конечно, она не работает: P

def csvStringParser(): 
    a = {} 
    b = {} 
    i = 0 
    f = open('/Users/settingj/Desktop/NOxMultiplier.csv') 
    for line in f.readlines(): 
    reader = csv.reader(line.split('\t'), delimiter='\t') 
     for row in reader: 
      #print '\t'.join(row)                                                            
      #print i                                                               
      a[i] = '\t'.join(row) 
      b[i] = '\t'.join(row) 
      print a[i] 
      print b[i] 
      i+=1 

Это честно мой первый час использования питона. Я мог бы легко сделать это в C++, но сейчас я просто пытаюсь изучить python, чтобы понять, что это большие преимущества/простота над C++.

ответ

2
import csv 

a = {} 
with open('/Users/settingj/Desktop/NOxMultiplier.csv') as f: 
    reader = csv.reader(f, delimiter='\t') 
    for row in reader: 
     a[row[0]] = row[1] 
print a 

Для двух массивов:

a = [] 
b = [] 
with open('/Users/settingj/Desktop/NOxMultiplier.csv') as f: 
    reader = csv.reader(f, delimiter='\t') 
    for row in reader: 
     a.append(row[0]) 
     b.append(row[1]) 
print a 
print b 

даже просто аналогичное решение с молнией:

with open('/Users/settingj/Desktop/NOxMultiplier.csv') as f: 
    a, b = zip(*csv.reader(f, delimiter='\t')) 
print a 
print b 
+0

haha ​​amazing ... dam easy ... Вы получаете голосование за копирование и вставку кода, но мне все еще интересно, как бы я создал 2 массива вместо одного, сопоставленного друг другу, как то, как я объяснял в своих вопросах ? – jsetting32

+0

В конце концов, я чувствую, что первый ответ - это моя конечная цель, но я не могу ее использовать. – jsetting32

+0

Добавлен два примера массивов. –

2

Хорошо, на самом деле, есть только одна строка кода:

a, b = zip(*(map(lambda x: x.rstrip('\n\r').split('\t'), open('file.csv').readlines()))) 

Некоторые ссылки:

+0

ваш ответ идеально подходит для решения словаря, например, как я указал в вопросе, и он настолько компактный :) Мне это нравится. – jsetting32

1

Вот моя реализация, которая делает то, что вы описываете с входом вы описываете: #!/usr/bin/python

def csvStringParser(filename): 
    a = [] 
    b = [] 
    f = open(filename) 
    for line in f.readlines(): 
     tok = line.split() 
     a.append(tok[0]) 
     b.append(tok[1]) 
    print a 
    print b 

if __name__=="__main__": 
    csvStringParser('temp.txt') 

Вы можете использовать другие разделители в split(), такие как split('\t'), если вы используете разделители табуляции, но вам, вероятно, не нужен пакет csv для описания.

+0

это в основном то же, что и принятый ответ, но вы получаете голосование, так как оно работает :) – jsetting32

+0

Да, я видел принятый ответ после того, как я разместил свой. Рад, что у вас есть образец рабочего кода. – cordoro

Смежные вопросы