2017-04-16 24 views
1

次のコードを使用して、ファイルを開き、必要な行を削除してからデータをファイルに書き出し、さらに下流の解析用にファイルを読み込みたいと思います。今(_io.TextIOWrapper)データの読み取り/印刷方法は?

with open("chr2_head25.gtf", 'r') as f,\ 
    open('test_output.txt', 'w+') as f2: 
    for lines in f: 
     if not lines.startswith('#'): 
      f2.write(lines) 
    f2.close() 

、(f2)私はf2のデータを読み取り、パンダや他のモジュールでさらに処理をしたいが、データを読みながら、私は問題に実行しています。 (前回withブロックが終了したときに)あなたは、ファイルへのより多くの何もできないので、

data = f2 # doesn't work 
print(data) #gives 
<_io.TextIOWrapper name='test_output.txt' mode='w+' encoding='UTF-8'> 

data = io.StringIO(f2) # doesn't work 
# Error message 
Traceback (most recent call last): 
    File "/home/everestial007/PycharmProjects/stitcher/pHASE-Stitcher-Markov/markov_final_test/phase_to_vcf.py", line 64, in <module> 
data = io.StringIO(f2) 
TypeError: initial_value must be str or None, not _io.TextIOWrapper 
+0

具体的にすることができますか? 'open(...)as f2.read()'の間にコードの2行目で 'f2.read()'を実行しようとしましたが、機能しませんでした。 – everestial007

答えて

4

ファイルが既に閉じています。ファイルを再度開くには、文で別のファイルを作成し、read属性を使用してファイルを読み込みます。

with open('test_output.txt', 'r') as f2: 
    data = f2.read() 
    print(data) 
+0

forループの最後に 'f2.close()'を置いてみませんでしたが、どちらもうまくいきませんでした。私はすでにあなたが提案したことを知っています。私はちょうど何度もファイルを読んでみたくなかった。そのコードに何かが欠落しているのか疑問に思っていた。 – everestial007

+0

ファイルを保存するにはファイルを閉じる必要がありますが、再オープンするのは簡単な方法です。あなたの 'with'ブロックは、ブロックが終了すると自動的にファイルを閉じます。 .close()を追加するかどうかにかかわらず、 – abccd

+1

@ everestial007: 'f2.close()'は前の 'with'が自動的に行うため、冗長です。 – martineau

関連する問題