首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新排列txt内容脚本

重新排列txt内容脚本
EN

Stack Overflow用户
提问于 2022-02-05 23:43:37
回答 3查看 45关注 0票数 0

我有一份捕食者及其相应猎物的清单,其格式如下:

狼:羊、鸡、兔

狮子:斑马,长颈鹿,羚羊

并希望将其转换为以下格式:

狼羊

狼鸡

狼兔

狮子斑马

狮子长颈鹿

狮子瞪羚

到目前为止,我已经尝试了这个代码来区分捕食者和猎物。

代码语言:javascript
复制
with open('test.txt','r') as in_file:
    stripped = (line.strip() for line in in_file)
    split = (line.split(":") for line in stripped if line)
    pred = []
    for line in split:
        pred.append(line[0])

with open('test.txt','r') as in_file:
    stripped = (line.strip() for line in in_file)
    split = (line.split(":") for line in stripped if line)
    preys = []
    for line in split:
        preys.append(line[1])
    prey = (line.split(",") for line in preys if line)

但把它们结合起来才是问题所在。我尝试过类似的方法:

代码语言:javascript
复制
with open('test.txt','r') as in_file:
    stripped = (line.strip() for line in in_file)
    i=0
    while i < line_count:
        rows.append(pred[i])
        for line in prey:
            rows.append(line[0])
        i+=1
EN

回答 3

Stack Overflow用户

发布于 2022-02-06 18:33:29

您可以一次处理一行输出,如下所示:

代码语言:javascript
复制
with open('test.txt') as f_input, open('output.txt', 'w') as f_output:
    for line in f_input:
        predator, prey = line.split(':')
        
        for p in prey.split(','):
            f_output.write(f'{predator} {p.strip()}\n')

给予你:

代码语言:javascript
复制
Wolf Sheep
Wolf Chicken
Wolf Rabbit
Lion Zebra
Lion Giraffe
Lion Gazelle
票数 1
EN

Stack Overflow用户

发布于 2022-02-06 00:00:06

您可以在下面的项目中阅读:

代码语言:javascript
复制
with open('test.txt','r') as in_file:
    dict_predators = {}
    for line in in_file:
        dict_predators[line.split(':')[0]] = line.split(':')[1].replace('\n', '').split(',')

首先用“:”分隔行--第一部分作为字典中的键,第二部分作为字典中值的列表(我用替换来消除换行符),然后用‘拆分',使它们成为字符串(之前有空格,因为当您将它们打印出来时已经要使用空格)。

你可以把它们写到这样的文件中:

代码语言:javascript
复制
with open('test2.txt','w') as in_file:
    for k,v in dict_predators.items():  # go through all the elements in the dictionary
        for item in v:  # go through all the elements of the list of values at that key
            in_file.write(f"{k}{item}\n")
票数 0
EN

Stack Overflow用户

发布于 2022-02-06 00:23:39

如果您可以使用itertoolsre模块,我将使用以下内容:

代码语言:javascript
复制
import itertools, re
with open('test.txt', 'r') as inFile, open('test2.txt', 'w') as outFile:
    for line in inFile:
        splitted = re.split(":|,", line.strip())
        predator = splitted[0].strip()
        preys = [ prey.strip() for prey in splitted[1:] ]
        content = zip(itertools.repeat(predator), preys)
        outFile.write('\n'.join([ ' '.join(item) for item in content ]))

它的工作原理:

separators;

  • puts

  • 逐行读取输入文件;对于每一行,

  • 首先使用coloncomma作为捕食者,然后使用coloncomma作为捕食者,并在两个命名变量中使用猎物使使用zipitertools.repeat;

  • creates的内容成为内容中条目的“联合”列表,使用空格作为joiner;

  • creates --以'\n‘作为合并器,将以前的列表元素连接为字符串;

  • 将其写入outFile.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71003084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档