2017-07-26 1 views
0

非常に大きなテキストファイルがあり、いくつかの行を除外したい。最初の行は、識別子であり、この例のような多くの行(異なるライン内の数字)が続いている。この行は、識別子であるPythonでテキストファイルの一部を削除する

fixedStep ch=GL000219.1 start=52818 step=1 
1.000000 
1.000000 
1.000000 
1.000000 
1.000000 
1.000000 
1.000000 
fixedStep ch=GL000320.1 start=52959 step=1 
1.000000 
1.000000 
1.000000 
fixedStep ch=M start=52959 step=1 
1.000000 
1.000000 

fixedStep ch=GL000219.1 start=52818 step=1 私はすべての識別子の行をフィルタリングする

ch=GL000219.1ch=GL000320.1と以下の行(数字)を含み、それらの下に他の識別子と対応する行(数字)を保持します。各識別子は複数回繰り返されます。 この出力のように:

fixedStep ch=M start=52959 step=1 
1.000000 
1.000000 

私はこのコードを試してみました:

l = ["ch=GL000219.1", "ch=GL000320.1"] # since I have more identifiers that should be removed 

with open('file.txt', 'r') as f: 
    with open('outfile.txt', 'w') as outfile: 
     good_data = True 
     for line in f: 
      if line.startswith('fixedStep'): 
       for i in l: 
        good_data = i not in line 
      if good_data: 
       outfile.write(line) 

私のコードは、私が欲しいものを返しません。あなたはコードを修正する方法を知っていますか?

+0

はgood_data'下= Iないline'に 'break'を追加します。 'good_data'はそれ自体が上書きされるので、1行に複数の値をとることができるので、' i'の最後の値に対して 'True'でなければなりません – roganjosh

+0

また、' good_data'はすべての行に対してリセットする必要がありますか? – roganjosh

+0

私は試しましたが、違いはありません。 – john

答えて

0

文字列(テキストファイルの内容)をテキストファイルから読み込んだ後、行に分割する必要があります。 Fへの読み取り後

プリント(f)は

を使用して、あなたはそれが文字列でないラインがわかります。

それはラインによって、その後のことができますループ、それを、一覧表示する文字列を変換するために

F = f.split( "\ n")を

を使用して、テキストファイルを終了UNIXだ場合。

1

あなたは間違った場所にこの行を配置:

good_data = True 

をfalseに設定されると、それは再び真実ではないだろう。

あなたはこのように書くことができます:それは今までに `false`をなれば

l = ["ch=GL000219.1", "ch=GL000320.1"] 
flag = False                   

with open('file.txt', 'r') as f, open('outfile.txt', 'w') as outfile:                     
    for line in f:                 
     if line.strip().startswith("fixedStep"):          
      flag = all(i not in line for i in l)          
     if flag:                  
      outfile.write(line)  
+0

識別子の下にあるすべての行を削除します。 – john

+0

@john「すべての行を削除する」という意味は、わかりませんでした。 – gushitong

+0

すべての識別子には下の行があります(例のように)。私が興味を持っていない識別子や以下の行を削除したいと思います。実際に私が興味を持っている識別子もあり、それらの下にある対応する行が必要です。 likeの例 – john

関連する問題