Ошибка атрибута: объект «list» не имеет атрибута «split»

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

время, широта, долгота , тип2015-03-20T10: 20: 35.890Z, 38.8221664, -122.7649994 , землетрясение2015-03-20T10: 18: 13.070Z, 33.2073333, -116.6891667 , землетрясение2015-03-20T10: 15: 09.000Z, 62.242 , -150,8769 , землетрясение

Моя программа:

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 »не имеет атрибута« split »

Пожалуйста, помогите мне!

    3 Solutions collect form web for “Ошибка атрибута: объект «list» не имеет атрибута «split»”

    Я думаю, у вас на самом деле больше путаницы.

    Исходная ошибка заключается в том, что вы пытаетесь вызвать split во всем списке строк, и вы не можете split список строк, а только строку. Итак, вам нужно split каждую линию , а не все.

    И затем вы делаете for points in Type , и ожидаете, что каждая такая points даст вам новые x и y . Но этого не произойдет. Types – это всего два значения: x и y , поэтому первые points будут x , а затем точки будут y , и тогда вы будете готовы. Итак, опять же, вам нужно зациклиться на каждой строке и получить значения x и y из каждой строки , а не цикл над одним Types из одной строки.

    Таким образом, все должно пройти внутри цикла над каждой строкой в ​​файле и split на x и 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 и Pandas, библиотеки, которые дают вам возможность неявно отображать функциональность по всему массиву или кадру данных почти так же, как вы пытались.

    Проблема в том, что readlines – это список строк, каждая из которых является строкой имени filename . Возможно, вы имели в виду:

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

    Это потому, что 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() 
    Python - лучший язык программирования в мире.