2011-09-20 6 views
6

मैं अधिमानतः एक शब्दकोश या सूची में एक पाठ फ़ाइल, जिनमें से मैं प्रत्येक स्तंभ की जरूरत है,, प्रारूप है:अजगर पढ़ने पाठ फ़ाइल

N  ID REMAIN  VERS   
2 2343333 bana   twelve  
3 3549287 moredp  twelve   
3 9383737 hinsila   twelve   
3 8272655 hinsila   eight   

मैं कोशिश की है:

crs = open("file.txt", "r") 
for columns in (raw.strip().split() for raw in crs): 
    print columns[0] 

परिणाम = 'सूचकांक होने की त्रुटि'

भी करने की कोशिश की:

crs = csv.reader(open(file.txt", "r"), delimiter=',', quotechar='|', skipinitialspace=True) 
    for row in crs: 
        for columns in row: 
          print columns[3] 

, किसी स्तंभ के रूप में प्रत्येक चार में पढ़ने के लिए लगता है जो प्रत्येक 'शब्द' के बजाय

मैं चार स्तंभों, यानी प्राप्त करना चाहते हैं:

2 
2343333 
bana 
twelve 
अलग शब्दकोशों या सूचियों

किसी में

मदद बहुत बढ़िया है, धन्यवाद!

+0

आप (, खुला (file.txt "," आर "), सीमांकक = ',' quotechar = '|', skipinitialspace = सच)' सीआरएस = csv.reader का उपयोग 'और एक सीएसवी के साथ दायर करवाना ** रिक्त स्थान ** 'delimiter 'के रूप में?'पंक्ति [3]' मुद्रित करें यदि यह वैरिएबल है जिसे आप प्रत्येक पुनरावृत्ति पर प्राप्त करते हैं, न कि 'कॉलम [3]'। – eumiro

+0

यदि मैं डिलीमीटर सेट करता हूं तो यह एक ही आउटपुट उत्पन्न करता है, मैं यह देखने के लिए "," के साथ खेल रहा था कि क्या मैं – Kilizo

+0

बदल सकता हूं, आपके लिए 'पहला' लूप काम करता है। सूचकांक त्रुटि से बाहर नहीं '। – senderle

उत्तर

8

यह मेरे लिए ठीक काम करता है:

>>> crs = open("file.txt", "r") 
>>> for columns in (raw.strip().split() for raw in crs): 
...  print columns[0] 
... 
N 
2 
3 
3 
3 

आप पंक्तियों को स्तंभों में परिवर्तित करना चाहते हैं, तो zip का उपयोग करें।

>>> crs = open("file.txt", "r") 
>>> rows = (row.strip().split() for row in crs) 
>>> zip(*rows) 
[('N', '2', '3', '3', '3'), 
('ID', '2343333', '3549287', '9383737', '8272655'), 
('REMAIN', 'bana', 'moredp', 'hinsila', 'hinsila'), 
('VERS', 'twelve', 'twelve', 'twelve', 'eight')] 

यदि आपके पास खाली रेखाएं हैं, तो ज़िप का उपयोग करने से पहले उन्हें फ़िल्टर करें।

>>> crs = open("file.txt", "r") 
>>> rows = (row.strip().split() for row in crs) 
>>> zip(*(row for row in rows if row)) 
[('N', '2', '3', '3', '3'), ('ID', '2343333', '3549287', '9383737', '8272655'), ('REMAIN', 'bana', 'moredp', 'hinsila', 'hinsila'), ('VERS', 'twelve', 'twelve', 'twelve', 'eight')] 
+0

धन्यवाद, आपने मुझे एहसास दिलाया है कि यह व्हाइटस्पेस की रेखा है जो मुझे इंडेक्स त्रुटि से बाहर कर रही है, मुझे लगता है, मैं व्हाइटस्पेस की रेखा से कैसे छुटकारा पा सकता हूं? – Kilizo

+0

@ किलीज़ो, मेरा संपादन देखें। – senderle

6
>>> with open("file.txt") as f: 
... c = csv.reader(f, delimiter=' ', skipinitialspace=True) 
... for line in c: 
...  print(line) 
... 
['N', 'ID', 'REMAIN', 'VERS', ''] #that '' is for leading space after columns. 
['2', '2343333', 'bana', 'twelve', ''] 
['3', '3549287', 'moredp', 'twelve', ''] 
['3', '9383737', 'hinsila', 'twelve', ''] 
['3', '8272655', 'hinsila', 'eight', ''] 

या, पुराने ढंग का रास्ता:

>>> with open("file.txt") as f: 
...  [line.split() for line in f] 
... 
[['N', 'ID', 'REMAIN', 'VERS'], 
['2', '2343333', 'bana', 'twelve'], 
['3', '3549287', 'moredp', 'twelve'], 
['3', '9383737', 'hinsila', 'twelve'], 
['3', '8272655', 'hinsila', 'eight']] 

और हो रही स्तंभ मानों के लिए:

>>> l 
[['N', 'ID', 'REMAIN', 'VERS'], 
['2', '2343333', 'bana', 'twelve'], 
['3', '3549287', 'moredp', 'twelve'], 
['3', '9383737', 'hinsila', 'twelve'], 
['3', '8272655', 'hinsila', 'eight']] 
>>> {l[0][i]: [line[i] for line in l[1:]] for i in range(len(l[0]))} 
{'ID': ['2343333', '3549287', '9383737', '8272655'], 
'N': ['2', '3', '3', '3'], 
'REMAIN': ['bana', 'moredp', 'hinsila', 'hinsila'], 
'VERS': ['twelve', 'twelve', 'twelve', 'eight']} 
+0

तो आप प्रत्येक मान को किसी शब्दकोश या सूची में कैसे पढ़ेंगे, इसलिए सूची में सभी 1 कॉलम और सूची में सभी दूसरे कॉलम। – Kilizo

+0

@ किलीज़ो, संपादित उत्तर, मुझे लगता है कि यह वही है जो आप चाहते हैं। – utdemir

0

आप इस प्रकार की सूची समझ इस्तेमाल कर सकते हैं:

with open("split.txt","r") as splitfile: 
    for columns in [line.split() for line in splitfile]: 
     print(columns) 

इसके बाद आप इसे 2 डी ए में रखेंगे रे आपको इसे किसी भी तरह से समूहित करने की इजाजत देता है।

1
with open("path\sample1.csv") as f: 
    for line in f: 
     print line 

+1

यह सवाल का जवाब नहीं देता है ... कोड में उचित इंडेंटेशन की कमी भी है –

0

सिर्फ सूचियों

import csv 

columns = [[] for _ in range(4)] # 4 columns expected 

with open('path', rb) as f: 
    reader = csv.reader(f, delimiter=' ') 
    for row in reader: 
     for i, col in enumerate(row): 
      columns[i].append(col) 

या की एक सूची का उपयोग लाइन द्वारा फ़ाइल लाइन को पढ़ने के लिए // स्तंभों की संख्या गतिशील बढ़ने की जरूरत है, तो:

import csv 

columns = [] 

with open('path', rb) as f: 
    reader = csv.reader(f, delimiter=' ') 
    for row in reader: 
     while len(row) > len(columns): 
      columns.append([]) 
     for i, col in enumerate(row): 
      columns[i].append(col) 

अंत में, फिर आप अपने कॉलम wi प्रिंट कर सकते हैं वें:

for i, col in enumerate(columns, 1): 
    print 'List{}: {{{}}}'.format(i, ','.join(col)) 
0

इस बारे में कैसे?

f = open("file.txt") 

for i in f: 
    k = i.split() 
    for j in k: 
     print j