<p>我认为你实际上有更大的困惑。</p>
<p>最初的错误是试图调用整个行列表中的<code>split</code>,而不能<code>split</code>一个字符串列表,只能调用一个字符串。所以,你需要<code>split</code><em>每一行,而不是整行。</p>
<p>然后你在做<code>for points in Type</code>,期望每一个这样的<code>points</code>给你一个新的<code>x</code>和<code>y</code>。但那不会发生的。<code>Types</code>只是两个值,<code>x</code>和<code>y</code>,所以首先<code>points</code>是<code>x</code>,然后点是<code>y</code>,然后就完成了。因此,同样,您需要循环每一行,并从每一行的<em>中获取<code>x</code>和<code>y</code>值,而不是从一行循环单个<code>Types</code>。</p>
<p>所以,所有的东西都必须在文件中的每一行上进入一个循环,并对每一行执行一次<code>split</code>到<code>x</code>和<code>y</code>的操作。像这样:</p>
<pre><code>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()
</code></pre>
<p>顺便说一下,您确实应该<code>close</code>这个文件,理想情况下应该使用<code>with</code>语句,但我将在最后讨论这个问题。</p>
<hr/>
<p>有趣的是,这里的问题不是你太新手了,而是你试图用专家会用的同样抽象的方式解决问题,只是还不知道细节。这是完全可行的;您只需显式地映射功能,而不是隐式地执行它。像这样的:</p>
<pre><code>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()
</code></pre>
<p>或者,更好的写作方法可能是:</p>
<pre><code>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()
</code></pre>
<hr/>
<p>最后,您可能想看看NumPy和Pandas,这些库<em>确实</em>为您提供了一种在整个数组或数据帧上隐式映射功能的方法,几乎与您尝试的方法相同。</p>