<p>有几件事。首先,不要在你的列表理解中直接使用<code>open()</code>。在</p>
<p>如果要使用<code>open()</code>,请始终使用上下文管理器,该管理器可确保在完成文件后关闭该文件:</p>
<pre><code>with open('filename..txt') as f:
lines = f.readlines()
</code></pre>
<p>第二:你会发现你的生活更容易不去操心<code>open()</code>,并开始使用惊人的<a href="https://docs.python.org/3/library/pathlib.html" rel="nofollow noreferrer">^{<cd4>} module</a>。在</p>
^{pr2}$
<p>第三:您可以使用Windows USERPROFILE环境变量自动找到其位置,而不是将整个路径复制粘贴到桌面:</p>
<pre><code>from pathlib import Path
import os
# os.getenv just gives you a dictionary with all the Windows environment variables
# (such as USERPROFILE and APPDATA)
user_folder_str = os.getenv['%USERPROFILE%']
desktop_path = Path(user_folder_str)/'Desktop'
file_path = Path(user_folder_str)/'Desktop'/'my_file.txt'
lines = list(file_path.read_text().split('\n'))
</code></pre>
<p>第四:粘贴的示例原始文件中似乎没有任何制表符(<code>'\t'</code>)。它有4个空格(<code>' '</code>)。如果真是这样的话,这应该行得通:</p>
<pre><code>[[i for i in line.strip().split(' ') if i] for line in lines]
</code></pre>
<p>注意<code>if i</code>部分。这可以确保任何由4个空格组成的<em>连续</em>集不会在列表中放入空字符串(<code>''</code>)。在</p>
<p>但是,粘贴的代码(相当于上面的代码)产生了错误的结果。我想这可能是因为第二行和第三行实际上有制表符(<code>'\t'</code>)而不是4个空格。所以您需要<code>split()</code>同时使用4个空格和一个制表符。在</p>
<p>最简单的方法是用4个空格替换制表符。再次使用相同的<code>if i</code>以避免空字符串。在</p>
<pre><code>[[i for i in line.strip().replace('\t', ' ').split(' ') if i] for line in lines]
</code></pre>