属性错误:“列表"对象没有“拆分"属性 [英] Attribute Error: 'list' object has no attribute 'split'

查看:33
本文介绍了属性错误:“列表"对象没有“拆分"属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试读取一个文件并用逗号分割每行中的一个单元格,然后仅显示包含有关纬度和经度的信息的第一个和第二个单元格.这是文件:

I am trying read a file and split a cell in each line by a comma and then display only the first and the second cells which contain information regarding the latitude and the longitude. This is the file:

时间,纬度,经度,type2015-03-20T10:20:35.890Z,38.8221664,-122.7649994,earthquake2015-03-20T10:18:13.33.2073333,-116.6891667,earthquake2015-03-20T10:15:09.000Z,62.242,-150.8769,地震

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()

当我尝试执行这个程序时,它给了我一个错误

When I try to execute this program, it gives me an error

"AttributeError: 'list' 对象没有属性 'split'

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

请帮帮我!

推荐答案

我认为您实际上在这里有更广泛的困惑.

I think you've actually got a wider confusion here.

最初的错误是你试图在整个行列表上调用split,而你不能split一个字符串列表,只能是一个字符串.所以,你需要split 每一行,而不是整件事.

The initial error is that you're trying to call split on the whole list of lines, and you can't split a list of strings, only a string. So, you need to split each line, not the whole thing.

然后你正在为 Type 中的点做 ,并期望每个这样的 points 给你一个新的 xy.但这不会发生.Types 只是两个值,xy,所以第一个 points 将是 x,然后点数将是y,然后你就大功告成了.因此,同样,您需要遍历每一行并从 每一行 中获取 xy 值,而不是遍历单个 类型来自一行.

And then you're doing for points in Type, and expecting each such points to give you a new x and y. But that isn't going to happen. Types is just two values, x and y, so first points will be x, and then points will be y, and then you'll be done. So, again, you need to loop over each line and get the x and y values from each line, not loop over a single Types from a single line.

因此,所有内容都必须在文件中的每一行上进行循环,然后将 split 分成 xy 一次每条线.像这样:

So, everything has to go inside a loop over every line in the file, and do the split into x and y once for each line. Like this:

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()

作为旁注,您确实应该关闭文件,最好使用with语句,但我会在最后讨论.

As a side note, you really should close the file, ideally with a with statement, but I'll get to that at the end.

有趣的是,这里的问题不是你太菜了,而是你试图以与专家相同的抽象方式解决问题,只是还不知道细节.这是完全可行的;您只需要明确映射功能,而不仅仅是隐式地进行映射.像这样:

Interestingly, the problem here isn't that you're being too much of a newbie, but that you're trying to solve the problem in the same abstract way an expert would, and just don't know the details yet. This is completely doable; you just have to be explicit about mapping the functionality, rather than just doing it implicitly. Something like this:

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()

或者,更好的写法可能是:

Or, a better way to write that might be:

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,它们确实为您提供了一种隐式映射整个数组或数据帧的功能的方法,几乎​​与您尝试的方式相同


Finally, you may want to take a look at NumPy and Pandas, libraries which do give you a way to implicitly map functionality over a whole array or frame of data almost the same way you were trying to.

这篇关于属性错误:“列表"对象没有“拆分"属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆