既存の処理では、ローカルに保存されているcsvファイルをopenで開いて、後続の処理で扱っています。
with open(src_file_path, "rb") as csvfile:
後続の処理としては、下記のようにreadしたり、色々します。
read_csv = csvfile.read().replace(b'\rn', b'\n') f = io.StringIO(read_csv.decode(encoding))
既存の処理では、ローカルファイルのcsvを読み込んでいましたが、これをs3に保存されているcsvを下記のようにs3から読み込んでdfとして扱うようにしました。
with s3.open(BUCKET_NAME + 'filename.csv', 'rb') as f: df = pd.read_csv(f)
なので、今までcsvのファイルを読み込んでいたところを下記のように変えたいのですがエラーが出ます
with df as csvfile:
まず、dfにはreadの関数はありません。
open(src_file_path, "rb") as csvfile は printすると <class '_io.BufferedReader'> と出力されるので、
同じような形式で扱いたいときに、下記のようにしてもうまくいきません。
buffer = io.TextIOBase() df.to_csv(buffer) with open(buffer) as csv_file:
前提として、後続の処理でcsv_fileとして扱う部分に関しては、他の処理の兼ね合いもあるため変更できません。
dfをopen(csv)とした時と同じように扱えるようにしたいです。
ローカルに一度csvファイルとして保存、という形も取れません。
'with open(src_file_path, "rb") as csvfile:' を単に、'with s3.open(BUCKET_NAME + 'filename.csv', 'rb') as f:'で置き替えるのではだめなのでしょうか?