<h2>克服循环行为的困惑:</h2>
<p><code>names</code>变量将是一个列表,每次使用它时它只包含一个项。请执行以下操作:</p>
<pre><code>import re
import csv
from pygoogle import pygoogle
names = []
with open('parse2.txt') as fin:
names = [x.strip() for x in fin.read().strip('\'"[]').split(' '*6)]
with open("output.txt") as fout:
for name in names:
g = pygoogle(name)
g.pages = 1
if (g.get_result_count()) == 0:
print "[Error]: could find no result for '{}'".format(name)
else:
fout.write("{} {} results\n".format(name, g.get_result_count()) )
</code></pre>
<h2>写一次文件</h2>
<p><em>不覆盖以前的查询</em></p>
<p>您需要颠倒<code>with</code>和<code>for</code>语句的顺序,这将打开文件一次:</p>
^{pr2}$
<p>或者,在附加模式下打开文件:</p>
<pre><code>for name in names:
with open("output.txt", "a") as f:
f.writelines(name)
</code></pre>
<p>在这种情况下,数据将在末尾添加。在</p>
<h2>转换数据</h2>
<p>为了得到你想要的东西而采取的步骤。在</p>
<ol>
<li>将原始列表转换为单词列表。在</li>
<li>把名单分成两人一组。在</li>
<li>写出两对。在</li>
</ol>
<p>具体如下:</p>
<pre><code>import re
from itertools import *
A = ["blah blah", "blah blah", "blah", "list"]
#
# from itertools doc page
#
def flatten(listOfLists):
"Flatten one level of nesting"
return list(chain.from_iterable(listOfLists))
def pairwise(t):
it = iter(t)
return izip(it,it)
#
# Transform data
#
list_of_lists = [re.split("[ ,]", item) for item in A]
# [['blah', 'blah'], ['blah', 'blah'], ['blah'], ['list']]
a_words = flatten(list_of_lists)
a_pairs = pairwise(a_words)
with open("output.csv", "wb") as f:
writer = csv.writer(f)
writer.writerows(a_pairs)
</code></pre>
<p>更简洁地写为:</p>
<pre><code>A_pairs = pairwise(flatten([re.split("[ ,]", item) for item in A]))
with open("output.csv", "wb") as f:
csv.writer(f).writerows(A_pairs)
</code></pre>
<h2>以正确的格式写出</h2>
<p>如果不希望在输出中使用逗号,只需为<code>csvwriter</code>定义一个自定义方言:</p>
<pre><code>>>> csv.register_dialect('mydialect', delimiter=' ', quoting=csv.QUOTE_MINIMAL)
>>> csv.writer(open("try.csv", "w"), dialect="mydialect").writerows(a_ps)
</code></pre>
<p>这就给了你想要的:</p>
<pre><code>➤ cat try.csv
blah blah
blah blah
blah list
</code></pre>