2013-01-10 94 views
1

我試圖根據通道組織新聞,即我需要使用list_a(下面)中的元素來命名我的txt文件,然後將相同頻道的相應字符串寫入同一文件。 這些txt文件可以寫入我目前的摺疊,沒有這方面的麻煩用Python自動生成字符串列表的文檔標題

我目前的擔心是如何有效地編寫它。因爲我不知道有多少串將被寫入文件做,當前文檔需要堅持到字符串耗盡,新的文檔踢

下面是一個例子:

輸入:2串列表:

list_a=['abc','abc','fox','abc',....] 

list_b=['campus shooting', 'Congress sucks', 'debt ceiling','1% rich', ...] 

輸出: 2文件與標題 '的abc.txt' 和 'fox.txt' 分別

在文檔的abc.txt

campus shooting 

congress sucks 

在文件fox.txt

debt ceiling 
+0

所以,列表總是這樣的順序? [chanX,chanY,chanZ]和[new_from_chan_x,new_from_chan_y,new_from_chan_z] ?,如果是這樣,你可以使用zip() – israelord

回答

2

,你可以在這裏使用zip()和追加模式打開文件('a'):

In [44]: list_a=['abc','abc','fox','abc'] 
In [45]: list_b=['campus shooting', 'Congress sucks', 'debt ceiling','1% rich'] 

In [46]: for x,y in zip(list_a,list_b): 
    ....:  with open(x+".txt" , "a") as f: 
    ....:   f.write(y+'\n') 
1

,只有一次打開文件的另一種方法:

from collections import defaultdict 

list_a = ['abc', 'abc', 'fox', 'abc'] 
list_b = ['campus shooting', 'Congress sucks', 'debt ceiling','1% rich'] 

results = defaultdict(list) 

for title, text in zip(list_a, list_b): 
    results[title].append(text) 

for title, result in results.iteritems(): 
    with open("%s.txt" % title , "w") as f: 
     f.write('\n'.join(result)) 
1

打開每個項目的文件可能會很昂貴(不要猜測,比較性能與此版本,避免它):

from itertools import groupby 
from operator import itemgetter 

L = sorted(zip(list_a, list_b), key=itemgetter(0)) # sorted (a, b) pairs 
for name, group in groupby(L, key=itemgetter(0)): 
    with open(name + ".txt", "w") as file: 
     for a, b in group: 
      file.write(b + "\n") 
+1

+1這樣做很好,但它會改變內容的順序。 –

+0

自Python 2.2以來,'sort()'保證是穩定的,即具有相同標題的項目應該保持順序。 – jfs

+0

@AshwiniChaudhary:你說得對。我忘了將keys添加到sorted()以保持順序。固定。 – jfs