<p>如果正如您所说的,文件显示<code>"FN:John Smith;;;\n\r"</code>,那么您就遇到了一个问题<code>\r</code>完全出乎意料。</p>
<p>你在使用什么操作系统,什么版本的Python,以及你是如何确定这个文件显示的?</p>
<p>以下是读取文件的常用习惯用法,该文件的行由您正在使用的操作系统通常使用的终止符终止,并且字段由<code>;</code>字符分隔:</p>
<pre><code>f = open('myfile.txt', 'r')
for line in f:
# standard OS terminator is converted to `\n`
line = line.rstrip('\n') # remove trailing newline
fields = line.split(';')
# fields[0] should refer to "FN:John Smith" in your example
for field_index, field in enumerate(fields):
if not field:
continue # empty field
tag, value = field.split(':')
print "Field %d: tag %r, value %r" % (field_index, tag, value)
</code></pre>
<p>你可能没有读过这个<a href="http://en.wikipedia.org/wiki/VCard" rel="nofollow noreferrer">Wikipedia article</a>。。。我注意到“FN”是指“格式化名称”,而不是“名字”,还有一个“N”标记更容易解析:</p>
<pre><code>N:Gump;Forrest
FN:Forrest Gump
</code></pre>
<p>我还注意到像<code>FN:John Smith;;;</code>这样的行并没有出现在文章中。</p>
<p>您可以使用现有代码;请参见<a href="https://stackoverflow.com/questions/2478027/how-do-i-parse-a-vcard-to-a-python-dictionary">this StackOverflow question</a>。</p>