<p>您可以通过将<code>linenumber modulo 5</code>与一个数字进行比较来识别每五行。在您的例子中,这应该是<code>0</code>,因为您需要第一行和第六行、第十一行。。。(注意python以索引0开头)</p>
<p>要获得行号和内容,可以使用<a href="https://docs.python.org/library/functions.html#enumerate" rel="nofollow noreferrer">^{<cd3>}</a>在文件中迭代。在</p>
<p>然后要丢弃字符串的<code>name:</code>部分并保留后面的内容,可以使用<a href="https://docs.python.org/library/stdtypes.html#str.split" rel="nofollow noreferrer">^{<cd5>}</a>。在</p>
<p>一个有效的实现可以如下所示:</p>
<pre><code># Create an empty list for the names
names = []
# Opening the file with "with" makes sure it is automatically closed even
# if the program encounters an Exception.
with open('name_data.txt', 'r') as file:
for lineno, line in enumerate(file):
# The lineno modulo 5 is zero for the first line and every fifth line thereafter.
if lineno % 5 == 0:
# Make sure it really starts with "name"
if not line.startswith('name'):
raise ValueError('line did not start with "name".')
# Split the line by the ":" and keep only what is coming after it.
# Using `maxsplit=1` makes sure you don't run into trouble if the name
# contains ":" as well (may be unnecessary but better safe than sorry!)
name = line.split(':', 1)[1]
# Remove any remaining whitespaces around the name
name = name.strip()
# Save the name in the list of names
names.append(name)
# print out the list of names
print(names)
</code></pre>
<p>您还可以将<a href="https://docs.python.org/library/itertools.html#itertools.islice" rel="nofollow noreferrer">^{<cd6>}</a>与步骤参数一起使用,而不是枚举:</p>
^{pr2}$
<hr/>
<p>根据您的需要,您可以考虑使用<code>re</code>模块来完全解析文件:</p>
<pre><code>import re
# The regular expression
group = re.compile(r"name: (.+)\nfamily name: (.+)\nlocation: (.+)\nmembers: (.+)\n", flags=re.MULTILINE)
with open(filename, 'r') as file:
# Apply the regex to your file
all_data = re.findall(group, file)
# To get the names you just need the first element in each group:
firstnames = [item[0] for item in all_data]
</code></pre>
<p>对于您的示例,<code>firstnames</code>将是<code>['Kelo', 'Miko']</code>,如果您使用<code>[item[1] for item in all_data]</code>,那么您将得到姓氏:<code>['Lam', 'Naiton']</code>。
要成功使用正则表达式,必须确保它与文件布局匹配,否则将得到错误的结果。在</p>