如何将字符串出现分割为单个txt文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将字符串出现分割为单个txt文件?相关的知识,希望对你有一定的参考价值。

例如,我有这些包含这些行的txt文件,

chicken
chicken
duck
duck
duck
parrot
parrot
chicken
chicken
chicken

我如何逐行阅读并将鸡肉(2行)分成1.txt,鸭子(3行)到2.txt和parrot(2行)到3.txt和最后一只鸡(3行)出现一个4.txt?

我已经想到这里,

count = 0

with open("test.txt") as rl:
    for num, line in enumerate (rl, 1):
        s = list(line)
        if "chicken" in line:
            count += 1

            finaljoin = "".join(s)

            print(count)

            with open("chicken.txt", 'a+') as f:
                f.write(finaljoin)

但我上面的解决方案只将整鸡(共5个)整理成一个文件。实际计划是将前两行抓取到txt文件,将最后两行鸡行抓到另一个txt文件。因为它被另一只动物分开了。

答案

你可以这样做:

from itertools import groupby

with open('test.txt') as f:
    data = f.read().split('\n')

for ind, (_, g) in enumerate(groupby(data),1):
    with open('{}.txt'.format(ind), 'w') as f:
        f.write('\n'.join(g))

说明:

你可以在这里阅读Itertools group:https://docs.python.org/2/library/itertools.html#itertools.groupby

Groupby将返回两个元素,即键和组。因此,如果我们想要遍历一个groupby,我们会做这样的事情:for key, group in groupby(object):for k, g in groupby(object):

现在在这种情况下,键将是chicken, duck, parrot, chicken,组将是['chicken', 'chicken'] , ['duck','duck... ...]

然而(现在是我解释ind, (_, g)的部分),为了获得索引,我们可以使用Python的枚举函数来返回索引和迭代器。通常它看起来像这样:for index, item in enumerate(list):for ind, i in enumerate(list)

现在让我们说我们要结合enumerategroupby。然后我们可以这样做:for index, (key, group) in enumerate(groupby(object)):或更紧凑:for ind, (_, g) ...。我在这种情况下使用_(这是Pythonic)来表示我对变量(在这种情况下是键)不感兴趣。

另一答案

你可以试试:

count = 0
with open("test.txt") as readFile:
    previous_line = ""
    archive_name = ""
    for line in readFile:
        if line != previous_line:
             previous_line = line
             count += 1
             archive_name = str(count)+".txt"
        with open(archive_name, 'a+') as f:  
            f.write(line)

这将节省1.txt中的“鸡肉鸡”,2.txt中的“鸭鸭”,3.txt中的“鹦鹉鹦鹉”和4.txt中的“鸡鸡鸡”

另一答案

实际上,你还没弄明白。你没有分裂条款;你所做的就是搜索“鸡”,无论它出现在哪里,然后将这些重组的行转储到“chicken.txt”文件中。你没有为任何其他动物做过任何规定,并且没有尝试逻辑来找到那些休息。此外,还有很多多余的代码,例如重复打开输出文件,以及生成从未使用过的num

如果需要,在纸上绘制您的基本逻辑。你缺少的关键步骤是检查以前的动物与当前的动物。这就像是

previous = None
with open("test.txt") as zoo:
    for animal in zoo:
        if animal == previous:
            # Process same animal
        else:
            # Process new animal
        previous = animal   # remember animal for next iteration

你能从那里拿走吗?对于num,以枚举行(rl,1):

以上是关于如何将字符串出现分割为单个txt文件?的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV+Python实现将车牌数字分割为单个的字符图片

用Python按时间分割txt文件中的数据

split命令

BioCode将多个蛋白质序列分成单个的txt文档

将txt文件作为数组导入python将两位数分割为单独的值

使用 Spark 处理 txt 文件