🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

パス

パス(path)はファイルシステムの場所(階層)を明示したものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

7770閲覧

(csv)globで取得したパスのファイルの読み込みについて

sio3321

総合スコア4

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

パス

パス(path)はファイルシステムの場所(階層)を明示したものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/02/01 08:12

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
本日より未経験で勉強を始めたpython初心者です。
よろしくお願いいたします。

使用PC windows10 pro 64bit
python3

課題内容
csvファイルの読み込みでつまずいてます。
フォルダー下にあるcsvデータのパス(毎回名前がかわるのでglob使用)を取得できたのですがファイルの読み込みができません。
何が間違いでしょうか?お手数ですが教えてください。

#コード

import pandas as pd
import glob

csv_files = glob.glob("C:/Users/suppo/Documents/test/*.csv")
for a in csv_files:
print(a)

実行結果:C:/Users/suppo/Documents/test\deta123.csv
#ここまでは成功

f = open(csv_files, "r", encoding="utf-8")
s = f.read()
print(s)

エラーメッセージ
TypeError Traceback (most recent call last)
<ipython-input-44-973d6c4e9ab5> in <module>
----> 1 f = open(csv_files, "r", encoding="utf-8")
2 s = f.read()
3 print(s)

TypeError: expected str, bytes or os.PathLike object, not list

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

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

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

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

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

guest

回答3

0

エラーメッセージをよく見ましょう。
f = open(csv_files, "r", encoding="utf-8")
の行でエラーが起きています。
エラーメッセージは、
TypeError: expected str, bytes or os.PathLike object, not list
です。
意味が分からなければGoogle翻訳で翻訳してみましょう。
翻訳すると
TypeError:リストではなくstr、bytesまたはos.PathLikeオブジェクトが必要です、
となります。

glob.globの戻り値はリストですので、csv_filesはリストです。
for a in csv_files:
print(a)
で表示できたのはfor文がリストの要素を取り出してaに入れてくれたからです。

print(csv_files)
を実行して、その結果をよく見てください。

リストはたくさんのものを入れることができる入れ物です。
今回は、
['C:/Users/suppo/Documents/test\deta123.csv']
というように一つしかはいっていませんが、そのフォルダにもう一つファイルがあれば
['C:/Users/suppo/Documents/test\deta123.csv','C:/Users/suppo/Documents/test\deta456.csv']
というように、2個入っているかもしれません。
それをopenに渡して開いてください、と頼んでも、二つ一度には開けません。そこで、以下のエラーメッセージが出たのです。

TypeError: expected str, bytes or os.PathLike object, not list
TypeError:リストではなくstr、bytesまたはos.PathLikeオブジェクトが必要です

この場合は、引数として文字列を渡すべきなのですが、そのためにどうすればいいのかはわかりますか?

投稿2021/02/01 08:29

編集2021/02/01 08:50
ppaul

総合スコア24670

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

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

sio3321

2021/02/01 08:42

print(csv_files) 実行したところ 結果:['C:/Users/suppo/Documents/test\deta123.csv'] となりました。 deta123.csvが固定であれば、読み込みの説明ページがたくさんあるのですが、非固定CSVを読み込む説明がどこにもないため困ってます。助言いただけると助かります。
otn

2021/02/01 09:27

回答をみて、「わぁ、すごく丁寧に説明されている」と思ったのですが、それでも質問者が意味を理解できていない。 質問者は、この回答を熟読したのにもかかわらず理解できないのか、飛ばし読み・斜め読みして、質問と同じ事を繰り返し言ってるのか、どちらなんでしょう? それによって、この先の説明の仕方も違ってくると思います。
sio3321

2021/02/01 09:37

申し訳ありません。本日よりプログラミングの勉強をしており、まったく無知のため丁寧な説明であるにもかかわらず理解が追い付かずです。無念です。やりたいことを試しながら勉強するより、基礎を叩き込んだほうが良いかもしれませんね。ごめんなさい。
otn

2021/02/01 09:44 編集

謝ることでは無いです。ということは、おそらくリスト(list)を知らないと言うことですね。 まずは、入門書のリストの章を読んでみてはどうでしょうか。おそらく図入りで解説されているかと思います。 アドバイスとしては、せっかく回答者ppaulさんが、 > そのためにどうすればいいのかはわかりますか? と書いていらっしゃるので、それに対して「わかりません」と書くのが良かったです。質問と同じ事を繰り返し書くのは意味がありません。
ppaul

2021/02/01 09:47

最初は、そんなものですよ。 基礎は大事です。 C言語のような手続き型言語だと、式と文を理解すれば良いのですが、現在のpythonはオブジェクト指向言語のため、いろいろなオブジェクトのことも理解する必要があります。 概要の理解には、以下をざっと読んでみるのがいいと思います。 https://docs.python.org/ja/3/tutorial/index.html
otn

2021/02/01 09:57

そうですね。初心者が知識が無いことを謝る必要は全くありません。 ただ、入門書を半分も読んでいないレベルで質問しても、回答が理解できない事が多いと思います。 ppaulさんが紹介されているようにPythonはウェブ上に良い入門書(チュートリアル)があるので、書籍の入門書が手元に無い場合はそれを読みましょう。
sio3321

2021/02/01 10:03

ppaulさん otnさん アドバイスいただきありがとうございます。 コロナ過で大変な中、何とか会社の業務改善の役に立ちたく勉強をはじめました。 YOUTUBEを見てたら何とかなると考えましたが簡単ではなさそうですね。 (少しイレギュラーになるさっぱり) お二方の説明が理解できるよう入門書を買いあさり基礎を勉強しますね。 不快な思いをさせてましたら申し訳ありません。ありがとうございました。
ppaul

2021/02/01 10:18

otnさんのおっしゃるように、わからないことをわからないと言えるのは大事なことです。お互いに気を付けたいものです。 また、ネットの情報は玉石混交で、間違った情報も多いので注意しましょう。 言葉の意味を間違って理解すると、話がかみ合いません。taratailのpythonとcsvに関係する質問の2~3割はcsvとデータフレームを取り違えています。そうならないように、紙の書籍ならオライリーかそれと同等の信頼性のあるもの、ネットならそれぞれの開発者が書いている公式ドキュメントが一番です。pythonは日本語のマニュアルが充実していますが、ときどき誤訳もあるのが残念です。英語が読めるのが良いのですが、これは人それぞれですね。
ppaul

2021/02/01 10:27

sio3321さんがまじめな人であることは、文章を少し読めば良くわかります。 気にしないで、どんどん質問をしてください。 プログラミングは簡単ではありませんが、継続は力なり、です。 知識や技術は自分を裏切りません。頑張って良い技術を身につけてください。
sio3321

2021/02/06 04:26

ppaulさん otnさん まだ理解が追い付けてませんが前にすすめてます。アドバイスありがとうございました。また質問すると思いますがよろしくお願いいたします。
guest

0

import pandas as pd
import glob

csv_files = glob.glob("C:/Users\suppo/Documents/test/*.csv")
csv_files

df = pd.DataFrame()
for csv in csv_files:
df = pd.concat([df,pd.read_csv(csv,index_col=[0],parse_dates=[0],encoding='shift_jis')])

df = df.sort_index()
df

#調べた結果上記コードで前に進むことができました。
#まだ理解が追い付けてませんががんばります。お世話になりました。

投稿2021/02/06 03:55

sio3321

総合スコア4

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

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

0

自己解決

import pandas as pd
import glob

csv_files = glob.glob("C:/Users\suppo/Documents/test/*.csv")
csv_files

df = pd.DataFrame()
for csv in csv_files:
df = pd.concat([df,pd.read_csv(csv,index_col=[0],parse_dates=[0],encoding='shift_jis')])

df = df.sort_index()
df

投稿2021/02/06 03:50

sio3321

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問