<p>要回答这个问题,每一行都必须与它后面的行一起考虑。这里的规则是,如果以下所有条件都适用,则删除换行符:</p>
<ul>
<li>它不是文件的最后一行</li>
<li>该行至少包含2个单词</li>
<li>下一行至少包含一个单词</li>
</ul>
<p>这个问题可以通过使用一个生成函数方便地解决,该生成函数一次生成一对连续的线。这将在文件上进行迭代的逻辑与决定何时删除换行符的逻辑完全分离</p>
<pre><code>#!/usr/bin/env python
def num_words_line(line):
return len(line.split())
def iter_lines(input_file):
"""
yields pairs of adjacent lines
"""
with open(input_file) as f:
previous = next(f)
for line in f:
yield (previous, line)
previous = line
yield (line, None)
def fix_newlines(input_file, output_file):
with open(output_file, "w") as fout:
for line, next_line in iter_lines(input_file):
if (next_line != None and
num_words_line(line) > 1 and
num_words_line(next_line) > 0):
line = line.replace("\n", " ")
fout.write(line)
if __name__ == '__main__':
fix_newlines("input.txt", "output.txt")
</code></pre>
<p>给出:</p>
<pre class="lang-none prettyprint-override"><code>Balanced Quantum Classical Evolutionary Algorithm(BQCEA)
Muhammad Shahid, Hasan Mujtaba, Muhammad Asim, Omer Beg
Abstract
With advancement in Quantum computing, classical algorithms are adapted and integrated with Quantum properties such as qubit representation and entanglement. Although these properties perform better however pre-mature convergence is the main issue in Quantum Evolutionary Algorithms(QEA) because QEA uses only the best individual to update quan- tum population. In this paper, we introduced a new way to update the quantum population of QEA to avoid premature convergence
</code></pre>
<p>注意,每行的字数计算两次。为了获得更高的效率,可以通过改变<code>iter_lines</code>在读入每一行时调用<code>num_words_line</code>来解决这一问题,但代价是代码稍微多一些,并生成对中每一行的长度以及行本身。但是<code>iter_lines</code>和<code>fix_newlines</code>之间的逻辑分离就不那么清晰了</p>
<p>可以使用稍微不同的版本来操作内存中的字符串,而不是读写文件:</p>
<pre><code>#!/usr/bin/env python
def num_words_line(line):
return len(line.split())
def iter_lines(input_string):
"""
yields pairs of adjacent lines
"""
iterator = iter(input_string.strip().split("\n"))
previous = next(iterator)
for line in iterator:
yield (previous, line)
previous = line
yield (line, None)
def fix_newlines(input_string, from_file=True):
output = ''
for line, next_line in iter_lines(input_string):
newline = not (next_line != None and
num_words_line(line) > 1 and
num_words_line(next_line) > 0)
output += line
if newline:
output += "\n"
else:
output += " "
return output
if __name__ == '__main__':
input_text = ['Balanced Quantum Classical Evolutionary Algorithm(BQCEA)\n\nMuhammad Shahid, Hasan Mujtaba, Muhammad Asim, Omer Beg\n\nAbstract\nWith advancement in Quantum computing, classical algorithms are adapted and integrated\nwith Quantum properties such as qubit representation and entanglement', ' Although these\nproperties perform better however pre-mature convergence is the main issue in Quantum\nEvolutionary Algorithms(QEA) because QEA uses only the best individual to update quan-\ntum population', ' In this paper, we introduced a new way to update the quantum population\nof QEA to avoid premature convergence',]
str = ' '.join(input_text)
print(fix_newlines(str))
</code></pre>