2015-05-05 38 views
6

मैं एक फ़ाइल को पढ़ने की कोशिश कर रहा हूं और प्रत्येक पंक्ति में एक कॉमा द्वारा एक सेल विभाजित कर रहा हूं और फिर केवल प्रथम और दूसरी कोशिकाओं को प्रदर्शित करता हूं जिसमें अक्षांश और जानकारी के बारे में जानकारी होती है देशांतर। इस फ़ाइल में है:विशेषता त्रुटि: 'सूची' ऑब्जेक्ट में कोई विशेषता नहीं है 'विभाजन'

time,latitude,longitude,type2015-03-20T10:20:35.890Z,38.8221664,-122.7649994,earthquake2015-03-20T10:18:13.070Z,33.2073333,-116.6891667,earthquake2015-03-20T10:15:09.000Z,62.242,-150.8769,earthquake

मेरे कार्यक्रम:

def getQuakeData(): 
    filename = input("Please enter the quake file: ") 
    readfile = open(filename, "r") 
    readlines = readfile.readlines() 

    Type = readlines.split(",") 
    x = Type[1] 
    y = Type[2] 
    for points in Type: 
     print(x,y) 
getQuakeData() 

जब मैं इस कार्यक्रम पर अमल करने की कोशिश, यह मेरे एक त्रुटि

"AttributeError: 'list' object has no attribute 'split'

देता है कृपया मेरी मदद करो!

+1

क्योंकि 'सूची' में कोई' विभाजन 'नहीं है' केवल 'स्ट्रिंग' ऑब्जेक्ट्स 'विभाजित' – letsc

+2

'रीडलाइन() '' सूची' देता है। आपको उस सूची में प्रत्येक स्ट्रिंग पर 'split()' का उपयोग करना होगा। – TigerhawkT3

+0

त्रुटि को बारीकी से पढ़ें। आप 'रीडलाइन' विभाजित करने की कोशिश कर रहे हैं, जो एक सूची है। ऐसा नहीं किया जा सकता है। – Loocid

उत्तर

7

मुझे लगता है कि आपको वास्तव में यहां एक व्यापक भ्रम मिला है।

प्रारंभिक त्रुटि यह है कि आप लाइनों की पूरी सूची पर split पर कॉल करने का प्रयास कर रहे हैं, और आप split स्ट्रिंग्स की एक सूची नहीं, केवल एक स्ट्रिंग नहीं कर सकते हैं। तो, आपको splitप्रत्येक पंक्ति की आवश्यकता है, पूरी बात नहीं।

और फिर आप for points in Type कर रहे हैं, और ऐसे प्रत्येक points उम्मीद कर आप एक नया x और y देने के लिए। लेकिन ऐसा होने वाला नहीं है। Types सिर्फ दो मूल्यों, x और y है, इसलिए पहले pointsx हो जाएगा, और फिर अंक y हो जाएगा, और उसके बाद आप कर दिया जाएगा। तो, फिर, आपको प्रत्येक पंक्ति पर लूप करने की आवश्यकता है और और yप्रत्येक पंक्ति से मान प्राप्त करें, एक पंक्ति से एक Types पर लूप नहीं।

तो, सब कुछ फ़ाइल की हर पंक्ति पर एक पाश के अंदर जाते हैं, और प्रत्येक पंक्ति के लिए एक बार x में split और y करना होता है। इस तरह:

def getQuakeData(): 
    filename = input("Please enter the quake file: ") 
    readfile = open(filename, "r") 

    for line in readfile: 
     Type = line.split(",") 
     x = Type[1] 
     y = Type[2] 
     print(x,y) 

getQuakeData() 

एक तरफ ध्यान दें के रूप में, तुम सच में फ़ाइल close चाहिए, आदर्श एक with बयान के साथ है, लेकिन मैं अंत में उस के लिए मिल जाएगा।


दिलचस्प है, समस्या यहाँ नहीं है कि आप एक नौसिखिया के बहुत ज्यादा किया जा रहा हो, लेकिन तुम एक विशेषज्ञ उसी सार रास्ते में समस्या को हल करने की कोशिश कर रहे है कि, और बस नहीं अभी तक विवरण पता है। यह पूरी तरह से करने योग्य है; आपको बस इसे निष्पादित करने की बजाए कार्यक्षमता को मैप करने के बारे में स्पष्ट होना चाहिए।कुछ इस तरह:

def getQuakeData(): 
    filename = input("Please enter the quake file: ") 
    readfile = open(filename, "r") 
    readlines = readfile.readlines() 
    Types = [line.split(",") for line in readlines] 
    xs = [Type[1] for Type in Types] 
    ys = [Type[2] for Type in Types] 
    for x, y in zip(xs, ys): 
     print(x,y) 

getQuakeData() 

या, एक बेहतर तरीका लिखने के लिए है कि हो सकता है:

def getQuakeData(): 
    filename = input("Please enter the quake file: ") 
    # Use with to make sure the file gets closed 
    with open(filename, "r") as readfile: 
     # no need for readlines; the file is already an iterable of lines 
     # also, using generator expressions means no extra copies 
     types = (line.split(",") for line in readfile) 
     # iterate tuples, instead of two separate iterables, so no need for zip 
     xys = ((type[1], type[2]) for type in types) 
     for x, y in xys: 
      print(x,y) 

getQuakeData() 

अंत में, आप NumPy और पांडा पर एक नज़र लेने के लिए चाहते हो सकता है, पुस्तकालयों जो करना आपको पूरी तरह से उसी सरणी या डेटा के फ्रेम पर कार्यक्षमता को मानचित्र रूप से मैप करने का एक तरीका देता है जिस तरह से आप कोशिश कर रहे थे।

0

समस्या यह है कि readlines तारों की एक सूची है, जिनमें से प्रत्येक filename की एक पंक्ति है। शायद आप का मतलब:

for line in readlines: 
    Type = line.split(",") 
    x = Type[1] 
    y = Type[2] 
    print(x,y) 
0

इसका कारण यह है readlines आप लाइनों की सूची दे। आपको लाइन (लूप) द्वारा सूची और विभाजन रेखा पर स्थानांतरित करने की आवश्यकता है।

def getQuakeData(): 
    filename = input("Please enter the quake file: ") 
    readfile = open(filename, "r") 
    readlines = readfile.readlines() 
    for line in readlines: 
     Type = line.split(",") 
     x = Type[1] 
     y = Type[2] 
     print(x,y) 
getQuakeData() 
संबंधित मुद्दे

 संबंधित मुद्दे