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

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

времениширота,долгота, type2015-03-20T10:20: 35.890 Z,38.8221664, -122.7649994,землетрясение2015-03-20T10:18: 13.070 Z,33.2073333, -116.6891667,earthquake2015-03-20T10:15:09.000 Z и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'

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

2 ответов


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

изначальная ошибка заключается в том, что вы пытаетесь назвать 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()

в качестве примечания, вы действительно должен!--22--> файл, в идеале с 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, библиотеки которых do дайте вам способ неявно отображать функциональность по всему массиву или фрейму данных почти так же, как вы пытались.


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

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