0

問題を詳しく説明しましょう...

私は 2 つのテキスト ファイル (プール ファイル) CL-0.txt と CL-1.txt を持っています。この 2 つをそれぞれさらに 2 つの部分に分割する必要があります。CL-0.txt をさらに 2 つの部分 xx_0.txt と yy_0.txt に分割し、CL-1.txt を部分 xx_1.txt と yy_1.txt に分割します。2 つのファイルの内容は次の形式です。CL-0 (リンゴ、オレンジ) (マンゴー、バナナ) (ケーキ、紅茶) (コーヒー、砂糖) (ミルク、ハチミツ) (ケーキ、ビスケット) CL-1 (オレンジ、マンゴー) (ブドウ、コーヒー) (カー、アイスクリーム) ) (テーブル、椅子) (窓、ミルク)

エントリおよびエンティティとして参照しているものを明確にするために、エントリは: (リンゴ、オレンジ) であり、エンティティはリンゴです。各エントリには 2 つの要素があります。コンマはセパレータです。重複するエントリまたはエントリがあってはなりません。エントリまたは要素が 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 には表示されません

各エントリは 1 つずつ取得され、エントリがファイルに書き込まれるまで、2 つのファイルのエントリが交互に選択されます。

期待される出力は次のとおりです

CL-0 の構成ファイル:

*xx_0 ファイルの内容: (りんご、オレンジ) (ケーキ、お茶) (牛乳、蜂蜜)

*yy_0 ファイルの内容: (マンゴー、バナナ) (コーヒー、砂糖) (ケーキ、ビスカット) ケーキは xx_0 に既に表示されているため、追加できません

CL-1 からの構成ファイル:

*xx_1 ファイルには以下が必要です: (orange, mango) *この場合、重複したエントリは問題ありません (car, icecream)

* yy_1 ファイルは次のようになります: (ブドウ、コーヒー) *この場合も重複エントリは問題ありません (テーブル、椅子) (窓、ミルク) は、xx_0 ファイルに既に表示されているエンティティ ミルクが重複するため、ここに追加できません

CL-0 ファイルを 2 つの部分にうまく分割できれば、残りは少し調整するだけで簡単に実装できると考えて、問題の半分を試みました。

私の努力は次のとおりです。

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
4

1 に答える 1

0

行が 2 つの異なるファイルに交互に配置されると仮定します。

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()

xx1しかし、私はこれらとyy1セットの目的が何であるかを理解していませんでした. あなたのコードは間違いなくそれを説明していませんでした(これらにまったく書き込みませんでした)、あなたのテキストも十分に役に立ちませんでした。多分あなたはそれについて詳しく知りたいですか?

于 2013-02-28T13:52:28.013 に答える