将文本文件分成两个包含非重叠条目的文件

时间:2013-02-28 12:54:15

标签: python duplicates set

让我详细解释一下这个问题......

我有两个文本文件(池文件)CL-0.txt和CL-1.txt 我必须将两者中的每一部分分成另外两部分。 CL-0.txt分为另外两个部分xx_0.txt和yy_0.txt以及CL-1.txt到xx_1.txt和yy_1.txt部分。两个文件的内容采用以下格式。 CL-0     (苹果,橙色)     (芒果,香蕉)     (蛋糕,茶)     (咖啡,糖)     (牛奶,蜂蜜)     (蛋糕,biscuts) CL-1     (橙子,芒果)     (葡萄,咖啡)     (汽车,冰淇淋)     (桌子,椅子)     (窗口,牛奶)

清除我所称的条目和实体: 一个条目是:(苹果,橙色) 一个实体是:苹果 每个条目都有两个元素。逗号是分隔符。 应该没有重复的条目或条目。 如果条目或元素出现在xx_0.txt中,则它不能出现在yy_0.txt和yy_1.txt中 如果条目或元素出现在yy_0.txt中,则它不能出现在xx_0.txt和xx_1.txt中 如果条目或元素出现在xx_1.txt中,则它不能出现在yy_0.txt和yy_1.txt中 如果条目或元素出现在yy_1.txt中,则它不会出现在xx_0.txt和xx_1.txt

逐个获取每个条目,并且交替选择两个文件的条目,直到将条目写入文件。

预期输出如下

来自CL-0的组成文件:

* xx_0文件应具有: (苹果,橙色) (蛋糕,茶) (牛奶,蜂蜜)

* yy_0文件应具有: (芒果,香蕉) (咖啡,糖) (蛋糕,biscuts)无法添加,因为蛋糕已经出现在xx_0

来自CL-1的constinuent文件:

* xx_1文件应具有: (橙色,芒果) * 在这种情况下,重复的条目是可以的 (汽车,冰淇淋)

* yy_1文件将具有: (葡萄,咖啡) * 在这种情况下再次输入重复的条目 (桌子,椅子) (窗口,牛奶)不能在这里添加,因为它会有重复的实体牛奶已经出现在xx_0文件中

我尝试了一半的问题,如果我能成功地将CL-0文件分成两部分,其余部分可以通过一些调整轻松实现。

我的努力如下:

xx_0=open('xx_0.txt','wb') #the file that i want to populate
yy_0=open('yy_0.txt','wb') #the file that i want to populate
file=open('CL-0.txt','r')  # the main file
xx0=set()
xx1=set() # un1 a set against which the desired file has to be checked against for matches
yy0=set()
yy1=set() # un2 a set against which the desired file has to be checked against for matches
for line in file:
    s=line.replace('[,]','')

    s=s.replace('\n','')
    s=s.replace('(','')
    s=s.replace(')','')
    s=s.replace("'",'')

    r=re.split(',',s)
    if L==1:
        for n in r:
            if n not in yy0:
                if n not in yy1:
                    xx0.add(n)
        r1= ', '.join(r)
        xx_0.write(r1)
        xx_0.write('\n')

        L+=1
        continue

    if L==2:
        for n in r:
            if n not in xx_1:
                if n not in yy_1:
                    yy0.add(n)                  
        r2=', '.join(r)
        yy_0.write(r2)
        yy_0.write('\n')
        L=1

1 个答案:

答案 0 :(得分:0)

假设这些行应交替放入两个不同的文件中:

inputFile = file('CL-0.txt')
out = [ file(fileName, 'wb') for fileName in [ 'xx_0.txt', 'yy_0.txt' ] ]
done = set()
for line in inputFile:
  elements = re.match(r'\s*\(\s*([^,])*\s*,\s*([^)])*\)\s*', line)
  if elements in done:
      continue
  out[0].write(', '.join(elements) + '\n')
  done.add(elements)
  out = out[1:] + [ out[0] ]  # round robin
for f in out:
  f.close()

但我不明白这些xx1yy1集的目的是什么。你的代码肯定没有解释它(它根本没有写到这些),你的文本也没有用。也许你想详细说明一下?