使用Python从字符串列表自动生成文档标题
我试图根据频道组织新闻,即,我需要使用列表a(下面)中的元素命名我的txt文件,然后将同一频道的相应字符串写入同一文档。 这些txt文件可以写入我当前的文件夹,没有任何麻烦 我现在关心的是如何有效地编写它。因为我不知道将有多少字符串写入文档,所以当前文档需要一直保持,直到字符串耗尽,新文档生效 以下是一个例子: 输入:2个字符串列表:使用Python从字符串列表自动生成文档标题,python,list,title,Python,List,Title,我试图根据频道组织新闻,即,我需要使用列表a(下面)中的元素命名我的txt文件,然后将同一频道的相应字符串写入同一文档。 这些txt文件可以写入我当前的文件夹,没有任何麻烦 我现在关心的是如何有效地编写它。因为我不知道将有多少字符串写入文档,所以当前文档需要一直保持,直到字符串耗尽,新文档生效 以下是一个例子: 输入:2个字符串列表: list_a=['abc','abc','fox','abc',....] list_b=['campus shooting', 'Congress sucks
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
您可以在此处使用zip()
,并以附加模式打开文件('a'
):
您可以在此处使用zip()
,并以附加模式打开文件('a'
):
仅打开文件一次的替代方法:
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))
仅打开文件一次的替代方法:
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))
为每个项目打开一个文件可能会很昂贵(不要猜测,将性能与此版本进行比较以避免此问题):
为每个项目打开一个文件可能会很昂贵(不要猜测,将性能与此版本进行比较以避免此问题):
那么,列表总是这样排列的?[chanX,chanY,chanZ]和[new_from_chan_x,new_from_chan_y,new_from_chan_z]?如果是这样,你可以用zip()来完成,那么列表总是这样排序的?[chanX,chanY,chanZ]和[new_from_chan_x,new_from_chan_y,new_from_chan_z]?如果是这样的话,你可以用一个zip()来完成,因为Python 2.2保证了排序()是稳定的,也就是说,具有相同标题的项目应该保持顺序。@AshwiniChaudhary:你是对的。我忘了向sorted()添加键以保持顺序。已修复。
sort()
保证是稳定的,因为Python 2.2即具有相同标题的项目应保持顺序。@AshwiniChaudhary:你说得对。我忘了向sorted()添加键以保持顺序。固定的。
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")