<p>如果您试图处理一个文件,其中每一行都是一个逗号分隔的值列表,那么<a href="https://docs.python.org/3/library/csv.html" rel="nofollow">^{<cd1>}</a>模块就是用来处理这个文件的。你知道吗</p>
<p>在您的更新版本中,看起来它们实际上是一个<em>选项卡</em>分隔的值列表…但这只是CSV的方言(称为TSV),模块也可以很好地处理:</p>
<pre><code>peps = open('ppl.txt', 'r')
reader = csv.reader(peps, delimiter='\t')
for row in reader:
# here, row is a list of column values
</code></pre>
<p>您还可以使用<code>csv.writer</code>将行以CSV格式写回。如果要将这些行写入终端,甚至可以使用<code>csv.writer(sys.stdout)</code>。你永远不必处理分裂和加入的问题,这一切都由你来处理。你知道吗</p>
<hr/>
<p>但是,第一列本身就是一个<code>lastname, first</code>,您还需要对它进行解析。为此,我将使用<code>str.split</code>或<code>str.partition</code>(具体取决于如果Cher在您的类中,您希望获得什么行为)。我也不确定是要在<code>', '</code>上拆分,还是在<code>,</code>上拆分,然后去掉空格。两种方法都很简单。例如:</p>
<pre><code>lastname, _, firstname = row[0].partition(',')
writer.writerow((firstname.strip(), lastname.strip()))
</code></pre>
<hr/>
<p>当我们这样做的时候,对文件使用<code>with</code>语句总是更好的,所以我们也这样做吧。你知道吗</p>
<blockquote>
<p>But my intention is just making a new text file containing just the Name, Lastname in a nice column.</p>
</blockquote>
<pre><code>import csv
with open('ppl.txt') as infile, open('names.txt', 'w') as outfile:
reader = csv.reader(infile, delimiter='\t')
writer = csv.writer(outfile)
for row in reader:
lastname, _, firstname = row[0].partition(',')
writer.writerow((firstname.strip(), lastname.strip()))
</code></pre>
<p>我不太清楚你的空间问题是什么。如果在某些情况下制表符后面有空格,并且希望忽略它们,那么应该查看<code>csv</code>模块中的<a href="https://docs.python.org/3/library/csv.html#csv.Dialect.skipinitialspace" rel="nofollow">^{<cd10>}</a>选项。例如:</p>
<pre><code>reader = csv.reader(infile, skipinitialspaces=True)
</code></pre>
<p>但是如果在实际列的中间有制表符和空格,并且您想去掉它们,那么您可能需要使用<code>str.replace</code>或正则表达式。例如:</p>
<pre><code>lastname, _, firstname = row[0].partition(',')
firstname = re.sub(r'\s', '', firstname)
lastname = re.sub(r'\s', '', lastname)
writer.writerow((firstname, lastname))
</code></pre>