各金融机构的独特元素

2024-05-15 23:47:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有4个文件,想知道元素是不重叠的(每个文件)相比,其他文件的元素。在

文件A

Vincy
ruby
rome

文件B

^{pr2}$

文件C

^{3}$

文件D

Vincy
rocky
Willy

对perl、python、shell、bash中的一行程序有什么建议吗。预期产出为:

文件A:ruby,文件B:Peter,文件C:PaulAlex文件D:rockyWilly。在


Tags: 文件程序bash元素shell建议perlpeter
3条回答

热针:

import sys
inputs = {}
for inputFileName in sys.args[1:]:
  with open(inputFileName, 'r') as inputFile:
    inputs[inputFileName] = set([ line.strip() for line in inputFile ])
for inputFileName, inputSet in inputs.iteritems():
  print inputFileName
  result = inputSet
  for otherInputFileName, otherInputSet in inputs.iteritems():
    if otherInputFileName != inputFileName:
      result -= otherInputSet
  print result

但没有尝试;-)

下面是一个快速的python脚本,它可以对任意数量的文件执行所需的操作:

from sys import argv
from collections import defaultdict

filenames = argv[1:]
X = defaultdict(list)
for f in filenames:
    with open(f,'r') as FIN:
        for word in FIN:
            X[word.strip()].append(f)

for word in X:
    if len(X[word])==1:
        print "Filename: %s word: %s" % (X[word][0], word)

这样可以得到:

^{pr2}$

澄清问题后编辑:所有文件中的唯一元素,以及它所在的文件:

cat File_A File_B File_C File_D |sort | uniq -u | while read line ; do file=`grep -l $line File*` ; echo "$file $line" ; done

编辑:

当然,如果文件比较大,这样做的速度会更快:

^{pr2}$

执行方式: myscript.pl文件A文件B文件C。。。锉刀

澄清前的材料: 使用shell命令非常简单。跨所有文件的非重复元素

cat File_A File_B File_C File_D |sort | uniq -u

所有文件中的唯一元素

cat File_A File_B File_C File_D |sort | uniq

每个文件的唯一元素 (编辑感谢@Dennis Williamson)

for line in File* ; do echo "working on $line" ; sort $line | uniq ; done

相关问题 更多 >