Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python从字符串列表自动生成文档标题_Python_List_Title - Fatal编程技术网

使用Python从字符串列表自动生成文档标题

使用Python从字符串列表自动生成文档标题,python,list,title,Python,List,Title,我试图根据频道组织新闻,即,我需要使用列表a(下面)中的元素命名我的txt文件,然后将同一频道的相应字符串写入同一文档。 这些txt文件可以写入我当前的文件夹,没有任何麻烦 我现在关心的是如何有效地编写它。因为我不知道将有多少字符串写入文档,所以当前文档需要一直保持,直到字符串耗尽,新文档生效 以下是一个例子: 输入:2个字符串列表: list_a=['abc','abc','fox','abc',....] list_b=['campus shooting', 'Congress sucks

我试图根据频道组织新闻,即,我需要使用列表a(下面)中的元素命名我的txt文件,然后将同一频道的相应字符串写入同一文档。 这些txt文件可以写入我当前的文件夹,没有任何麻烦

我现在关心的是如何有效地编写它。因为我不知道将有多少字符串写入文档,所以当前文档需要一直保持,直到字符串耗尽,新文档生效

以下是一个例子:

输入: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
您可以在此处使用
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")