我认为您实际上在这里更加困惑。
最初的错误是您试图调用
split整个行列表,而不能
split列出一个字符串列表,而只能是一个字符串。因此,您需要
split每一行
,而不是全部。
然后您正在做
for points inType,并期望每一个
points都能给您带来新的
x感觉
y。但这不会发生。
Types是两个值,
x和
y,所以首先
points是
x,然后点是
y,然后就可以完成。因此,同样,您需要遍历每行并从
每行 获取
x和
y值,而不是遍历单行中的一行。 __
Types
因此,所有内容都必须循环进入文件中的每一行,并对每一行执行一次
splitinto
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,它们 确实 为您提供了一种以几乎与您尝试的方式相同的方式在整个数据数组或数据帧上隐式映射功能的方法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)