2008-11-29 20 views
26

है, मैं फ़ाइल खोलने और फ़ाइल से पढ़ने वाली प्रत्येक पंक्ति के साथ एक सूची बनाने की कोशिश कर रहा हूं।एक ऐसी सूची बनाएं जिसमें फ़ाइल की प्रत्येक पंक्ति

i=0 
    List=[""] 
    for Line in inFile: 
     List[i]=Line.split(",") 
     i+=1 
    print List 

लेकिन यह नमूना कोड है कि index is out of range कह i+=1 की वजह से एक त्रुटि मुझे देता है। मेरी समस्या क्या है? इनफाइल में हर नई लाइन के साथ मेरी सूची बढ़ाने के लिए मैं कोड कैसे लिख सकता हूं?

उत्तर

58

ऐसा नहीं है कि तुलना में बहुत आसान है:

List = open("filename.txt").readlines() 

इस फ़ाइल में प्रत्येक पंक्ति की एक सूची देता है।

+0

wooow बस सही! इसने काम कर दिया। बीटीडब्ल्यू कल्पना करें कि एक फाइल नहीं थी ... लेकिन मैं एक गतिशील सूची बनाने के लिए wnat ... मैं इस पर एक तत्व कैसे जोड़ सकता हूँ? जैसे कि सरणी थी? ty इतना – UcanDoIt

+0

संलग्न विधि चाल करेगा। उदाहरण के लिए: xs.append (लाइन) –

+2

फ़ाइल को बंद करने के बारे में क्या? – matlabit

-5

मुझे पायथन के बारे में निश्चित नहीं है लेकिन अधिकांश भाषाओं में एरे के लिए फ़ंक्शन/एपेंड फ़ंक्शन है।

8
my_list = [line.split(',') for line in open("filename.txt")] 
+2

मुझे लगता है कि मूल पाइथन को समझने की कोशिश करने वाले किसी भी व्यक्ति के लिए एक सूची समझ में एक बड़ी समझ हो सकती है। :) – Dustin

+0

मुझे लगता है कि आप सही हैं ... – orip

+0

डस्टिन सही है, हालांकि ओरीप ने सवाल का सबसे सही जवाब दिया है। – tzot

1

एक फ़ाइल लगभग लाइनों की एक सूची है। लूप के लिए आप में इसका उपयोग कर सकते हैं।

myFile= open("SomeFile.txt", "r") 
for x in myFile: 
    print x 
myFile.close() 

या, यदि आप लाइनों की वास्तविक सूची चाहते हैं, तो बस फ़ाइल से एक सूची बनाएं।

myFile= open("SomeFile.txt", "r") 
myLines = list(myFile) 
myFile.close() 
print len(myLines), myLines 

आप एक सूची के अंत में एक नई आइटम डाल करने के लिए someList[i] नहीं कर सकते। आपको someList.append(i) करना होगा।

इसके अलावा, कभी भी एक अपरकेस अक्षर के साथ एक साधारण चर नाम शुरू करें। List उन लोगों को भ्रमित करता है जो पाइथन को जानते हैं।

इसके अलावा, कभी भी एक चर के रूप में एक अंतर्निहित नाम का उपयोग करें। list एक मौजूदा डेटा प्रकार है, और इसे एक चर के रूप में उपयोग करने वाले लोगों को पाइथन पता है जो भ्रमित हैं।

+0

मैं पाइथन कोडिंग मानकों के बारे में कैसे झुका सकता हूं? धन्यवाद, मुझे नहीं पता था कि आप लोअरकेस में व्यवहार्य नामों का उपयोग करते हैं ... इसके लिए कोई विशेष कारण? टा – UcanDoIt

+0

जब आप सम्मेलनों पर हैं, पीईपी 8 में भी ब्रांड्स के अंदर रिक्त स्थान के बारे में कुछ कहना है। :) – Dustin

+0

देखें http://www.python.org/dev/peps/pep-0008/, यह भी देखें http://stackoverflow.com/questions/159720/what-is-the-naming-convention-in-python -for-variable-and-function-names –

1

f.readlines() एक सूची है कि सूची

में एक आइटम के रूप में प्रत्येक पंक्ति है अगर आप चाहते हैं eachline के विभाजित होने का रिटर्न (",") आप सूची comprehensions उपयोग कर सकते हैं

[ list.split(",") for line in file ] 
7

कृपया PEP8 पढ़ें। आप अजगर सम्मेलनों से काफी दूर चल रहे हैं।

आप अल्पविराम द्वारा विभाजित प्रत्येक पंक्ति की सूची की एक सूची चाहते हैं, मैं यह कर चाहते हैं:

l = [] 
for line in in_file: 
    l.append(line.split(',')) 

आप प्रत्येक रिकॉर्ड पर एक नई पंक्ति मिलेगा। आपको लगता है कि नहीं करना चाहते हैं:

l = [] 
for line in in_file: 
    l.append(line.rstrip().split(',')) 
+0

बहुत बहुत धन्यवाद। काफी सहायक... – UcanDoIt

22

मैं इसे इस तरह से

lines_list = open('file.txt').read().splitlines() 

हर लाइन लाइन पात्रों में से अपने अंत (\ n \ r) के साथ आता है किया; इस तरह पात्रों को हटा दिया जाता है।

0

आप यह मानते हुए भी शुरुआत और प्रत्येक पंक्ति के अंत में खाली स्थान के पट्टी करना चाहते हैं, आप readlines द्वारा वापस सूची में स्ट्रिंग पट्टी समारोह मैप कर सकते हैं:

map(str.strip, open('filename').readlines()) 
संबंधित मुद्दे