<p>您的问题是,您没有对file对象(即<code>open</code>返回的对象)执行任何操作,而是试图将文件名当作文件对象来操作。所以,改变一下:</p>
<pre><code>devFile = raw_input('Enter the full file path to your device list file: \n >')
open(devPath, 'r')
</code></pre>
<p>为此:</p>
^{pr2}$
<p>一旦你这样做了,它就“起作用了”,但可能不是你想要的那样。例如,对于此文件:</p>
<pre><code>abc, def
ghi, jkl
</code></pre>
<p>你会得到这个:</p>
<pre><code>[['abc', ' def\n'], ['ghi', ' jkl\n']]
</code></pre>
<p>存在<code>'\n'</code>字符是因为<code>for line in devFile:</code>返回保留了换行符的行。如果你想摆脱它们,你必须做些事情,比如<code>rstrip('\n')</code>。在</p>
<p>空间没有魔法,因为空间不能做任何事情。你让它在<code>','</code>上拆分<code>'abc, def'</code>,你将得到<code>'abc'</code>和{<cd9>}。如果你想去掉它们,<code>strip</code>结果。在</p>
<p>你还有很多其他的小问题,例如,你从来没有关闭过文件,但它们都不会真正阻止你的代码工作。在</p>
<p>所以:</p>
<pre><code>def deviceFile():
devPath = raw_input('Enter the full file path to your device list file: \n >')
devFile = open(devPath, 'r')
device = []
for line in devFile:
# creating an array here to hold each line. Call with object[0][0]
device.append([value.strip() for value in line.rstrip('\n').split(',')])
return(device)
</code></pre>
<p>现在您将返回这个:</p>
<pre><code>[['abc', 'def'], ['ghi', 'jkl']]
</code></pre>
<p>这看起来很复杂。在可以<code>split</code>之前,在每一行上调用<code>rstrip</code>这没什么大不了的,但是对每个值调用<code>strip</code>的列表理解会让人有点难以阅读。如果你不知道什么是列表理解(这似乎很有可能,因为你已经为<code>device</code>列表设置了一个<code>append</code>的显式循环),你必须做如下事情:</p>
<pre><code>device = []
for line in devFile:
values = []
for value in line.rstrip('\n').split(','):
values.append(value.strip())
device.append(values)
</code></pre>
<p>然而,有一个更简单的方法来做到这一点。标准库中的<a href="http://docs.python.org/2/library/csv.html" rel="nofollow">^{<cd17>} module</a>负责处理新行和空白的所有棘手问题,以及您还没有想到的事情(如引用或转义的值)。在</p>
<pre><code>def deviceFile():
devPath = raw_input('Enter the full file path to your device list file: \n >')
with open(devPath) as devFile:
return list(csv.reader(devFile))
</code></pre>