2010-06-25 15 views
7

इनपुट फ़ाइल से अंतरिक्ष/की तरह टैब अलग के लिए के लिए एक लाइन विभाजित करने के लिए:अजगर कैसे पढ़ सकते हैं और कई पूर्णांकों

1 2 3 
4 5 6 
7 8 9 

कैसे लाइन पढ़ सकते हैं और पूर्णांकों विभाजित करने के लिए है, तो या तो सूची या tuples में सहेज लिया जाए? धन्यवाद।

data = [[1,2,3], [4,5,6], [7,8,9]] 
data = [(1,2,3), (4,5,6), (7,8,9)] 

उत्तर

11

एक तरह से यह करने के लिए, यह मानते हुए उप-सूचियों अलग पंक्ति में हैं:

with open("filename.txt", 'r') as f: 
    data = [map(int, line.split()) for line in f] 

ध्यान दें कि with बयान अजगर 2.6 जब तक अधिकारी बन नहीं था। आप किसी पुराने संस्करण का उपयोग कर रहे हैं, तो आप ("file.txt") खुले में लाइन के लिए (line.split() में है के लिए पूर्णांक (रों)) करने के लिए

from __future__ import with_statement 
+0

+1 यह जिस तरह से मैं करता हूं, उससे निकटतम है, और मुझे लगता है कि यहां 5 उत्तरों के "सर्वोत्तम प्रथाओं" (जो भी इसका मतलब है) का सबसे अच्छा उदाहरण है। –

2

tuples = [टपल की आवश्यकता होगी .readlines()]

मुझे आंतरिक जनरेटर के बजाय Jeff's map(int, line.split()) पसंद है।

+0

क्या इस तरह वास्तव में एक विभाजित रेखा को एक टुपल में संग्रहीत करता है? क्या आप थोड़ा और समझा सकते हैं? धन्यवाद। – Stan

+1

वास्तव में यह आपको सूचियों की एक सूची देगा, न कि tuples की सूची (क्योंकि 'str.split' एक सूची देता है)। असल में यह फ़ाइल को खोलता है, इसकी रेखाओं में पढ़ता है, फिर उनके माध्यम से ('टुप इन ...') को फिर से चलाएं और प्रत्येक को व्हाइटस्पेस पर विभाजित करें। –

+0

तो टुपल में कैसे स्टोर करें? यह मेरे मूल प्रश्न का हिस्सा है। धन्यवाद। – Stan

1

आपका मतलब है, इस तरह?

अद्यतन

बस पूर्णांक

string = """1 2 3 
4 5 6 
7 8 9""" 

data = [] 
for line in string.split("\n"): #split by new line 
    data.append(map(int, line.split(" "))) # split by spaces and add 

print(data) 

आउटपुट में प्रत्येक स्ट्रिंग परिवर्तित:

[[ '1', '2', '3'], [ ' 4 ',' 5 ',' 6 '], [' 7 ',' 8 ',' 9 ']]

[[1, 2, 3], [4, 5, 6], [7, 8, 9]] 

दा दाआ !!!

+0

नहीं, मैं स्ट्रिंग नहीं, मेरी सूची में पूर्णांक को सहेजना चाहता हूं। – Stan

+0

और क्या आप मेरे उदाहरण से पता लगा सकते हैं? ... यह आसान है ... – OscarRyz

+0

मैपिंग फ़ंक्शन का उपयोग करके समाप्त होता हूं। स्ट्रिंग में सभी को एक पूर्णांक में परिवर्तित करने के लिए अभी भी एक और तरीका नहीं पता चला। – Stan

1
def getInts(ln): 
    return [int(word) for word in ln.split()] 

f = open('myfile.dat') 
dat = [getInts(ln) for ln in f] 
3

यदि आप खुद को matrices या संख्याओं की तालिकाओं से निपटते हैं, तो क्या मैं numpy पैकेज का सुझाव दे सकता हूं?

import numpy as np 
data = np.loadtxt(input_filename) 
संबंधित मुद्दे