2017-09-24 9 views
1

私はファイルから読み込んでおり、出力の各3行目は前の2行の組み合わせでなければならないので、各行だけを読みたいと思います。これは小さな一例です:Python:入力ファイルの繰り返し行をスキップする方法は?

Input: 

<www.example.com/apple> <Anything> 
<www.example.com/banana> <Anything> 

Output: 

<www.example.com/apple> <Anything> 
<www.example.com/banana> <Anything> 
<Apple> <Banana> 

ラインのいずれかが繰り返された場合、またはそれが空行である場合は、その後、私はそれを処理したくない、私は2つの異なる行ごとに取得したいです。

これが私の本当の入力の一部です:

この場合
<http://catalog.data.gov/bread> <http://dbpedia.org> 
<http://catalog.data.gov/bread> <http://dbpedia.org> 
<http://catalog.data.gov/bread> <http://dbpedia.org> 
<http://catalog.data.gov/bread> <http://dbpedia.org> 

<http://catalog.data.gov/roll> <http://dbpedia.org> 
<http://catalog.data.gov/roll> <http://dbpedia.org> 

私は、出力は次のようになりたい:

<http://catalog.data.gov/bread> <http://dbpedia.org> 
<http://catalog.data.gov/roll> <http://dbpedia.org> 
<bread> <roll> 

は、これは私のコードです:

file = open('rdfs.txt') 
for id, line in enumerate(file): 
     if id % 2 == 0: 
      if line.isspace(): 
       continue 
      line1 = line.split() 
      sub_line1, rel_line1 = line1[0], line1[1] 
      sub_line1 = sub_line1.lstrip("<").rstrip(">") 
      print(sub_line1) 

     else: 
      if line.isspace(): 
       continue 
      line2 = line.split() 
      sub_line2, rel_line2 = line2[0], line2[1] 
      sub_line2 = sub_line2.lstrip("<").rstrip(">") 
      print(sub_line2) 

それは完璧に動作していますが、私はすべての行を取得しています.2行目が行に等しいかどうかを追加してから、すべてをスキップします彼はあなたが新しい異なった線を見つけるまで線を引く。私は今取得しています

出力:

http://catalog.data.gov/bread 
http://catalog.data.gov/bread 
http://catalog.data.gov/roll 
http://catalog.data.gov/roll 

感謝!!

答えて

1

あなたはすべて見てラインを保持し、その場合はすべての新しい行にチェックlines_seenかないでとあなたのチェックに追加しますset()、それline_seenという名前を宣言することができます。

あなたのコードは次のように見えるはずです。

file = open('rdfs.txt') 
lines_seen = set() # holds lines already seen 
for id, line in enumerate(file): 
    if line not in lines_seen: # not a duplicate 
     lines_seen.add(line) 
     if id % 2 == 0: 
      if line.isspace(): 
       continue 
      line1 = line.split() 
      sub_line1, rel_line1 = line1[0], line1[1] 
      sub_line1 = sub_line1.lstrip("<").rstrip(">") 
      print(sub_line1) 

     else: 
      if line.isspace(): 
       continue 
      line2 = line.split() 
      sub_line2, rel_line2 = line2[0], line2[1] 
      sub_line2 = sub_line2.lstrip("<").rstrip(">") 
      print(sub_line2) 
+0

これは私に良いアイデアを与えました。どうもありがとう!!!! – codeDojo

+0

よろしくお願いします。 –

関連する問題