私はgtfファイルを読んでから、それを編集して(サブプロセス、grep、awkを使って)、パンダに読み込みます。コンソール上のファイルを直接処理する方法(StringIOを使用する場合と使用しない場合)
私はヘッダー情報(#
で示される)を持つファイル名を持っていますので、まずgrepして削除する必要があります。私はPythonでそれを行うことができますが、より効率的な処理を行うためにパイプラインにgrep
を導入したいと思います。
import subprocess
from io import StringIO
gtf_file = open('chr2_only.gtf', 'r').read()
gtf_update = subprocess.Popen(["grep '^#' " + StringIO(gtf_file)], shell=True)
と
gtf_update = subprocess.Popen(["grep '^#' " + gtf_file], shell=True)
をこれらのコードの両方が、それがあった第一の試みのために、エラーをスロー:
Traceback (most recent call last):
File "/home/everestial007/PycharmProjects/stitcher/pHASE-Stitcher-Markov/markov_final_test/phase_to_vcf.py", line 39, in <module> gtf_update = subprocess.Popen(["grep '^#' " + StringIO(gtf_file)], shell=True)
TypeError: Can't convert '_io.StringIO' object to str implicitly
しかし、私はやってみました
、もし私がfilenを指定したらAME直接それが動作:
gtf_update = subprocess.Popen(["grep '^#' chr2_only.gtf"], shell=True)
を、出力は次のとおりです。
<subprocess.Popen object at 0x7fc12e5ea588>
#!genome-build v.1.0
#!genome-version JGI8X
#!genome-date 2008-12
#!genome-build-accession GCA_000004255.1
#!genebuild-last-updated 2008-12
誰かがこのような問題のための様々な例を提供してください、ともなぜ私はエラーを取得しています、なぜ/どのように説明してもらえコンソール/メモリにロードされたファイルに対してサブプロセスを直接実行することは可能でしょうか?
は、私はまた、call, check_call, check_output, etc.
とsubprocess
を使用してみましたが、私はこれらのように、いくつかの異なるエラーメッセージを得ている:ここで
OSError: [Errno 7] Argument list too long
と
Subprocess in Python: File Name too long
私は以前に "Pythonでサブプロセス:ファイル名が長すぎる"と見ました。私が誤ってファイル名の文字列の代わりに、開いているファイルの中のテキストをPopenの引数として渡していたとき、これは私に起こりました。 'gtf_update = subprocess.Popen([" grep '^#' chr2_only。'gtf_update.communicate()'を使用してそのコマンドを出力することができます。 – JacobIRR
'grep'コマンドでは、あなたの作業例のように* filename *を渡す必要があります。文字列 '' grep '^#' "'にStringIOオブジェクトまたはファイルオブジェクトを追加しようとすると、Pythonはそれらを文字列に変換できません。代わりにファイル名を追加してください。 –
しかし、なぜなら、このファイルをパイプラインの別々の枝に使う必要があるからです。だから、私はPythonの方法で 'data = open(.... ).read() 'を実行した後、この 'data'を使って別のものを実行してください。同じファイルを何度も何度も読まないでメモリと時間を節約しようとしています – everestial007