【问题标题】:permute a file and print even lines from a second file置换文件并打印第二个文件中的偶数行
【发布时间】:2017-06-27 05:55:16
【问题描述】:

我有两个输入文件:

句子.txt

This is a sentance with keyword one two three.
This is a sentance with keyword four five.
This is a sentence with keyword six.

keywords.txt

one two three
four five
six

我希望输出文件看起来像:

permuated-keywords.txt

one two three
one three two
two one three
two three one
three one two
three two one
four five
five four
six

multiple-sentances.txt

This is a sentance with keyword one two three.
This is a sentance with keyword one two three.
This is a sentance with keyword one two three.
This is a sentance with keyword one two three.
This is a sentance with keyword one two three.
This is a sentance with keyword one two three.
This is a sentance with keyword four five.
This is a sentance with keyword four five.
This is a sentence with keyword six.

此代码运行没有错误,但没有在 multiple-sentances.txt 中放入正确的行数

from itertools import permutations

import operator
from collections import Counter
from math import factorial
def npermutations(l):
    num = factorial(len(l))
    mults = Counter(l).values()
    den = reduce(operator.mul, (factorial(v) for v in mults), 1)
    return num / den


with open('sentances.txt', 'r') as longfile:  
   with open('multiple-sentances.txt', 'w') as out2:
      with open('keywords.txt', 'r') as shortfile:
         with open('permuated-keywords.txt', 'w') as out:
            for line in shortfile:
               perm=('\n'.join(map(' '.join, permutations(line.split()))))
               numofperms=npermutations(line.split())
               out.write(perm)
               out.write('\n')
               for line in longfile:
                  for i in range(numofperms):
                     out2.write(line)

~

【问题讨论】:

  • 您的预期结果并不明显。

标签: python python-3.x permutation itertools


【解决方案1】:

我希望,下面的代码可以帮助你。它看起来不那么“优雅”,但它正在工作。

import itertools
import os

with open(os.path.join(os.getcwd(),'keywords.txt'), 'r') as keyfile:
    keywords_list = keyfile.readlines()
    keywords_perm = []
    new_file = []
    with open(os.path.join(os.getcwd(),'sentences.txt'), 'r') as sentences:
        sentences_list = sentences.readlines()
    with open(os.path.join(os.getcwd(),'multiple-sentances.txt'), 'w') as new:
        i = 0
        for key in keywords_list:
            perm = itertools.permutations(key.split())
            for element in perm:
                keywords_perm.append(element)
                if sentences_list[i].find(" ".join(key.split())) != -1:
                    new.write(sentences_list[i][:sentences_list[i].find(" ".join(key.split()))] + " ".join(key.split()) + "\n")
                else:
                    i += 1
                    new.write(sentences_list[i][:sentences_list[i].find(" ".join(key.split()))] + " ".join(key.split()) + "\n")
    with open(os.path.join(os.getcwd(),'permutated-keywords.txt'), 'w') as out:
        for i in range (0, len(keywords_perm)):
            out.write(" ".join(keywords_perm[i]) + "\n")

【讨论】:

    猜你喜欢
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 2023-02-10
    相关资源
    最近更新 更多