環境
このコードは、ファイル オブジェクトを取得し、awk を使用してそこから情報を抽出することになっています。
'pieceSize' を引数として readlines() を使用します。「pieceSize」は、ファイルを処理する際に readlines() で処理する MB の数です。これは、読み取る必要のあるファイルがコンピューターのメモリよりもはるかに大きい場合に、プログラムに問題が発生しないことを期待して行いました。読み取られているファイルには、多くの行と列があります。
以下のコードは、awk を使用して最初の行から最初のフィールドを読み取ろうとしています。
import os
from subprocess import Popen, PIPE, STDOUT
def extract_info(file_object):
pieceSize = 16777216 # 16MB
for line in file_object.readlines(pieceSize):
eachline = line.rsplit() # removing extra returns
p = Popen(['awk','{{print `$`1}}'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
pOut = p.communicate(input=eachline)[0]
print(pOut.decode())
エラーメッセージ
私が受け取るエラーは次のようになります...
... in _communicate_with_poll(self, input)
chunk = input[input_offset : input_offset + _PIPE_BUF]
try:
-> input_offset += os.write(fd, chunk)
except OSError as e:
if e.errno == errno.EPIPE:
TypeError: must be string or buffer, not list