前提・実現したいこと
Pythonにおいて、ファイルの形式(拡張子)をif文で判別して、読み込み方を変える関数を作成しています。(文法的には正しくても、意図した通りに動くかは別として)関数は作成できたのですが、
実際に関数を呼び出してファイルを読み込む段階で上手く動きません。
該当のデータコード① ファイルの拡張子と指定した拡張子の演算記号が==(2019/06/17 22:00以降)
Python3
1import pandas as pd 2import os.path 3def identification_filetype (df1): 4 path, ext =os.path.splitext(df1) 5if ext==".csv": 6 pd.read_csv(df1, encoding="shift-jis") 7elif ext==".txt": 8 pd.read_table(df1, encoding="shift-jis") 9
該当のデータコード② ファイルの拡張子と指定した拡張子の演算記号がis(2019/06/17 22:00以降)
Python3
1def identification_filetype (df1): 2 path, ext =os.path.splitext(df1) 3if ext is".csv": 4 pd.read_csv(df1, encoding="shift-jis") 5elif ext is".txt": 6 pd.read_table(df1, encoding="shift-jis") 7 8os.chdir("C://Users//For Programming//Documents//Python Scripts3") 9df1 = pd.read_csv("AAA.csv") 10 11identification_filetype(df1)
発生している問題・エラーメッセージ(2019/06/17 22:00以降)
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-31-7e076d001f76> in <module>() ----> 1 identification_filetype(df1) <ipython-input-29-c1e0414762b5> in identification_filetype(df1) 1 def identification_filetype (df1): ----> 2 path, ext =os.path.splitext(df1) 3 if ext is".csv": 4 pd.read_csv(df1, encoding="shift-jis") 5 elif ext is".txt": ~\Anaconda3\lib\ntpath.py in splitext(p) 200 201 def splitext(p): --> 202 p = os.fspath(p) 203 if isinstance(p, bytes): 204 return genericpath._splitext(p, b'\', b'/', b'.') TypeError: expected str, bytes or os.PathLike object, not DataFrame
想定しているデータフレーム
tiitoiさんにご教授して頂いたコードを動かした時の結果
解決したい事
関数(これ自体がしっかりと動くものかは別として)からはエラーコードが吐き出されない
のですが、関数を使ってファイルを読み込む時に上記の様なエラーコードが発生しました。
「path, ext =os.path.splitext(df1)」に対して、
「xpected str, bytes or os.PathLike object, not DataFrame」
というエラーコードが出ているのを見るとos.pathで読み込んでいるものがファイルではなく
DataFrameになってしまっている感じがするので、ファイル形式で読みめれば(多分)
解決できるのではと思うのですが、方法が分からないです。
補足情報(FW/ツールのバージョンなど)
Anaconda
Python
Pycharm
お忙しいとは思いますが、よろしくお願いいたします。
情報に不足がありましたら、ご指摘お願いいたします。
ここにより詳細な情報を記載してください。
回答4件
あなたの回答
tips
プレビュー