2013-02-28 81 views
0

让我详细解释这个问题...分割文本文件到两个文件与非重叠项

我有两个文本文件(池文件)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 (橙,芒果) (葡萄,咖啡) (汽车,冰淇淋) (桌,椅) (窗口,牛奶)

明确什么我指作为一个入门和作为一个实体: 一个条目是:(苹果,橙色) 和一个实体是:apple 每个条目都有两个元素。逗号是分隔符。 应该没有重复的条目或条目。 如果条目或元素出现在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文件应该有: (橙,芒果)*一个重复的条目在这种情况下 (汽车,冰淇淋)

OK * 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 
+0

'(orange,mango)'?你应该采用什么策略来丢弃? – dmg 2013-02-28 13:02:17

+0

你没有初始化你的'L',所以我认为它在开始时应该是'L = 1'? – Alfe 2013-02-28 13:38:12

+0

@DJV我写的代码的前提是,当我开始循环“如果n不在yy0”它会给我不重复的元素,所以他们将被丢弃。推定是否错误? – irfanbukhari 2013-03-01 06:08:22

回答

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组的目的是。你的代码肯定没有解释它(它根本没有写入),你的文本也没有足够的帮助。也许你想详细说明一下?

+0

除了比较文件之间的匹配。这两个文件中的每一个都必须与xx_1和yy_1进行比较。这些集合将使用相同的技术填充,但是来自不同的文件。 set xx_0必须与yy_0和yy_1中的元素进行比较 并且必须将yy_0与xx_0和xx1中的元素进行比较 – irfanbukhari 2013-03-01 06:05:17

+0

让我详细说明它更多... 从文件CL-0我必须填充两个文件 每个具有非重叠entires(在对不应该匹配也不应每对中的每个元素在两个文件中被重复) 的xx_0集合具有对集yy_0进行检查和yy_1 和yy_0组具有至检查对套xx_0和xx_1 – irfanbukhari 2013-03-01 07:00:04

+0

让我解释多一点... 从文件CL-0我有填充两个文件 每个都具有非重叠entires(成对不应该是比赛也不应该每个元素每一对在t中重复wo文件) 如果重复对,则应丢弃它。如果一对中的任何元素重复,则应丢弃整个对。 必须根据集合yy_0和yy_1 检查xx_0集合,并且必须根据集合xx_0和xx_1检查yy_0集合。 @Alfe ...你的帮助对于确切的“对”匹配效果很好。但是我需要帮助摆脱一对中重新出现的元素。 – irfanbukhari 2013-03-01 07:12:42