質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

897閲覧

CSVアップロード機能の実装で、read_csvが2回以上使えない。

Tommy_suzuki

総合スコア5

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/07/28 08:33

前提

pythonのflaskでCSVアップロード機能を実装しております。

実現したいこと

送られてきたCSVをファイルをpd.read_csvで2回読み込みたいのですが、なぜか一回目のread_csvは通って、2回目のread_csvでエラーが出ます。
フロントエンドから送られてきたcsv_dataは一度read_csvすると中身がなくなるということはあるのでしょうか?

python

1def upload(): 2 csv_data = request.files['file'] 3 df = pd.read_csv(csv_data,skiprows=[0,1,2,3,4],encoding="cp932",engine="python") 4 print(df) 5 df = pd.read_csv(csv_data,skiprows=[0,1,2,3,4],encoding="cp932",engine="python") 6 print(df)

発生している問題・エラーメッセージ

python

1Traceback (most recent call last): 2 File "/usr/local/lib64/python3.7/site-packages/pandas/io/parsers/python_parser.py", line 376, in _infer_columns 3 line = self._buffered_line() 4 File "/usr/local/lib64/python3.7/site-packages/pandas/io/parsers/python_parser.py", line 584, in _buffered_line 5 return self._next_line() 6 File "/usr/local/lib64/python3.7/site-packages/pandas/io/parsers/python_parser.py", line 678, in _next_line 7 next(self.data) 8StopIteration 9 10The above exception was the direct cause of the following exception: 11 12Traceback (most recent call last): 13 File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2088, in __call__ 14 return self.wsgi_app(environ, start_response) 15 File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2073, in wsgi_app 16 response = self.handle_exception(e) 17 File "/usr/local/lib/python3.7/site-packages/flask_cors/extension.py", line 165, in wrapped_function 18 return cors_after_request(app.make_response(f(*args, **kwargs))) 19 File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2070, in wsgi_app 20 response = self.full_dispatch_request() 21 File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1515, in full_dispatch_request 22 rv = self.handle_user_exception(e) 23 File "/usr/local/lib/python3.7/site-packages/flask_cors/extension.py", line 165, in wrapped_function 24 return cors_after_request(app.make_response(f(*args, **kwargs))) 25 File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1513, in full_dispatch_request 26 rv = self.dispatch_request() 27 File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1499, in dispatch_request 28 return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args) 29 File "./api/views/csv_upload.py", line 30, in upload 30 df = pd.read_csv(csv_data,skiprows=[0,1,2,3,4],encoding="cp932",engine="python") 31 File "/usr/local/lib64/python3.7/site-packages/pandas/util/_decorators.py", line 311, in wrapper 32 return func(*args, **kwargs) 33 File "/usr/local/lib64/python3.7/site-packages/pandas/io/parsers/readers.py", line 586, in read_csv 34 return _read(filepath_or_buffer, kwds) 35 File "/usr/local/lib64/python3.7/site-packages/pandas/io/parsers/readers.py", line 482, in _read 36 parser = TextFileReader(filepath_or_buffer, **kwds) 37 File "/usr/local/lib64/python3.7/site-packages/pandas/io/parsers/readers.py", line 811, in __init__ 38 self._engine = self._make_engine(self.engine) 39 File "/usr/local/lib64/python3.7/site-packages/pandas/io/parsers/readers.py", line 1040, in _make_engine 40 return mapping[engine](self.f, **self.options) # type: ignore[call-arg] 41 File "/usr/local/lib64/python3.7/site-packages/pandas/io/parsers/python_parser.py", line 113, in __init__ 42 ) = self._infer_columns() 43 File "/usr/local/lib64/python3.7/site-packages/pandas/io/parsers/python_parser.py", line 398, in _infer_columns 44 raise EmptyDataError("No columns to parse from file") from err 45pandas.errors.EmptyDataError: No columns to parse from file

一回目のread_csvで読み込んだdfはprintされていました。
どのようにしたらいいでしょうか?

補足情報(FW/ツールのバージョンなど)

python3系、VScode

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ファイルオブジェクトは現在読み込んでいる場所を保持しています。

開いたときは先頭にあり、全部読み込んだ後は末尾にあります。
末尾にあるときに、読もうとすると、もう何もないよと言われます。
この仕組みは、ファイルを1行ずつ読み込むなどの処理をするのに便利です。

質問のコードのような例であれば、dfをコピーすればよさそうですし、ファイルからの読込みは、時間もかかるので、やめたほうがいいと思います。

どうしてもということであれば、seekメソッドを使えばリセットできます。

python

1csv_data.seek(0, 0)

とすればできるのではないかと。

投稿2022/07/28 08:57

TakaiY

総合スコア12745

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tommy_suzuki

2022/07/29 00:26

ご回答ありがとうございます。 なるほど、、pythonファイルの中身の問題だったんですね。 今回はcsv_data.seek(0, 0)で無事解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問