Ошибка атрибута: объект "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)