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

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

詳細はこちら
Python 3.x

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

Q&A

解決済

3回答

2583閲覧

PythonでCSVインポートしたいがファイルが選択できない。

Anon_

総合スコア334

Python 3.x

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

0グッド

0クリップ

投稿2021/01/22 09:04

pythonでcsvをimportしようとしているのですが、下記のコードを実行し参照ボタンをクリックしたあとに、フォルダは選択できるのですが、なぜかファイルが表示されずファイルの指定ができません。
色々調べたのですが自分では原因が分かりません。
何か分かる方はいらっしゃいませんでしょうか。

# merge_pdf_app.py (画面パーツの配置のみ) import tkinter import tkinter.filedialog as filedialog import tkinter.messagebox as messagebox from tkinter import ttk def ask_folder(): path = filedialog.askdirectory() folder_path.set(path) def app(): input_dir = folder_path.get() # 保存するPDFファイルを指定 output_file = filedialog.asksaveasfilename( filetypes=[("CSV Files(utf-8)", "*")], defaultextension=".csv" ) if not input_dir or not output_file: return # メッセージボックス messagebox.showinfo("完了", "完了しました。") # メインウィンドウ main_win = tkinter.Tk() main_win.title("test") main_win.geometry("500x120") # メインフレーム main_frm = ttk.Frame(main_win) main_frm.grid(column=0, row=0, sticky=tkinter.NSEW, padx=10, pady=10) # ウィジェット作成(フォルダパス) folder_label = ttk.Label(main_frm, text="フォルダ指定") # パラメータ folder_path = tkinter.StringVar() # ウィジェット(フォルダ名) folder_box = ttk.Entry(main_frm, textvariable=folder_path) folder_btn = ttk.Button(main_frm, text="参照", command=ask_folder) # ウィジェット(実行ボタン) app_btn = ttk.Button(main_frm, text="実行", command=app) # ウィジェットの配置 folder_label.grid(column=0, row=0, pady=10) folder_box.grid(column=1, row=0, sticky=tkinter.EW, padx=5) folder_btn.grid(column=2, row=0) app_btn.grid(column=1, row=2) # 配置設定 main_win.columnconfigure(0, weight=1) main_win.rowconfigure(0, weight=1) main_frm.columnconfigure(1, weight=1) main_win.mainloop() # メインウィンドウの作成

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

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

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

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

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

_whitecat_22

2021/01/22 09:59

実行ログに何か吐いてませんか? また、実行時の画面キャプチャなどはありませんか?
Daregada

2021/01/22 11:54 編集

> pythonでcsvをimportしようとしているのですが、 自分で書いたコードではないのかな? 「# 保存するPDFファイルを指定」とコメントにあるのに、ファイルタイプはCSVにしているし。そもそも保存したいわけではないですよね? > 参照ボタンをクリックしたあとに、フォルダは選択できるのですが、なぜかファイルが表示されずファイルの指定ができません。 フォルダーを選択するダイアログを「filedialog.askdirectory()」で開いているのだから当然ですよね。ファイルを開きたいのですか? どこかに載っていたコードを、わけもわからず書き換えているような感じがします。
Anon_

2021/01/22 14:22

コメントは参照元のものがそのまま残ってしまっていました。紛らわしくすみません。csvファイルを指定して取り込みたいのですが、askdirectory ではなくasksaveasfilenameで指定できるのでしょうか。
Daregada

2021/01/22 14:42

参照しているプログラムが掲載されているページをリンクとして質問に書きましょう。 askdirectoryは「フォルダーの選択」用、asksaveasfilenameは「名前を付けてファイルを保存」用のダイアログです。どちらもあなたの目的には合いません。 https://docs.python.org/3/library/dialog.html#native-load-save-dialogs
Anon_

2021/01/24 23:53

なるほど。ありがとうございます。
guest

回答3

0

CSVを読み取る方法だけを記します。下記の記事が参考になります。
※CSVを読み取った後の処理は、質問内容からは分かりかねますので、記載しておりません。

【python】【初心者】tkinterを使ってcsvファイルを読み取る方法(2/3)

【Python GUI tkinter実用サンプル】ttk.Treeviewを使ってcsvを閲覧編集するcsvビューワーを作成する

CSVファイルのビューワーをTkinterで作成する

投稿2021/01/23 02:32

_whitecat_22

総合スコア1305

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

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

0

ベストアンサー

Pythonプログラム用にTkinterで画面(GUI)を作成する方法 | ガンマソフト株式会社

をベースに、「参照」ボタンの処理にfiledialog.askopenfilenameを使った例。

Python

1import tkinter 2import tkinter.filedialog as filedialog 3from tkinter import ttk 4import pandas as pd 5 6 7def ask_csvfile(): 8 path = filedialog.askopenfilename(filetypes=[('CSVファイル', '*.csv')]) 9 csvfile_path.set(path) 10 11 12def import_csvfile(): 13 csvfile = csvfile_path.get() 14 if not csvfile: 15 return 16 df = pd.read_csv(csvfile) 17 print(df) 18 19 20main_win = tkinter.Tk() 21main_win.title("test") 22main_win.geometry("500x120") 23 24main_frm = ttk.Frame(main_win) 25main_frm.grid(column=0, row=0, sticky=tkinter.NSEW, padx=10, pady=10) 26 27csvfile_label = ttk.Label(main_frm, text="CSVファイル指定") 28csvfile_path = tkinter.StringVar() 29csvfile_box = ttk.Entry(main_frm, textvariable=csvfile_path) 30ask_btn = ttk.Button(main_frm, text="参照", command=ask_csvfile) 31import_btn = ttk.Button(main_frm, text="読込", command=import_csvfile) 32csvfile_label.grid(column=0, row=0, pady=10) 33csvfile_box.grid(column=1, row=0, sticky=tkinter.EW, padx=5) 34ask_btn.grid(column=2, row=0) 35import_btn.grid(column=1, row=2) 36 37main_win.columnconfigure(0, weight=1) 38main_win.rowconfigure(0, weight=1) 39main_frm.columnconfigure(1, weight=1) 40 41main_win.mainloop()

投稿2021/01/23 02:47

Daregada

総合スコア11990

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

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

Anon_

2021/01/25 00:06

完璧な回答ありがとうございます。 とても助かりました。
guest

0

おはようございます。

問題文読ませていただきました。

こんな感じでいかがでしょうか?

python

1import tkinter 2import tkinter.filedialog as filedialog 3from tkinter import ttk 4import pandas as pd 5 6# csvファイルを選択して、entry Widgetの値を更新する関数 7 8 9def askCsvFile(): 10 # file dialogを開く。 11 # filetypes : .csvファイル形式のみ選択できるように設定する。 12 # dialogについて : https://kuroro.blog/python/Um9TeIMMJAZdFqTYKVE6/ 13 path = filedialog.askopenfilename(filetypes=[('CSVファイル', '*.csv')]) 14 # entry Widgetの値をcsvファイルパスへ変更する。 15 csvFilePath.set(path) 16 17# csvファイルの内容を確認する関数 18 19 20def app(): 21 # entry Widgetの値を取得する。 22 path = csvFilePath.get() 23 # entry Widgetの値が存在しない場合、何もしない。 24 if not path: 25 return 26 27 # csvファイルの内容が壊れている可能性を加味して、try exceptさせる。 28 try: 29 df = pd.read_csv(path) 30 print(df) 31 except: 32 print('csvファイルの内容がおかしいです。') 33 pass 34 35 36# メインウィンドウ 37mainWin = tkinter.Tk() 38 39# メインウィンドウへタイトルを設定 40mainWin.title("test") 41# メインウィンドウの画面サイズを設定する。 42# geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/ 43mainWin.geometry("500x120") 44 45# メインウィンドウを親要素として、frame Widget(Frame)を作成する。 46mainFrm = ttk.Frame(mainWin) 47# メインウィンドウを親要素として、frame Widget(Frame)をどのように配置するのか? 48# gridについて : https://kuroro.blog/python/JoaowDiUdLAOj3cSBxiX/ 49mainFrm.grid(column=0, row=0, sticky=tkinter.NSEW, padx=10, pady=10) 50 51# frame Widget(Frame)を親要素として、label Widgetを作成する。 52# text : テキスト情報 53# Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/ 54fileLabel = ttk.Label(mainFrm, text="ファイル指定") 55 56# csvファイルパスを格納する変数を用意する。 57# StringVarについて : https://kuroro.blog/python/K53voPjJuKFfYrjmP8FP/ 58csvFilePath = tkinter.StringVar() 59 60# frame Widget(Frame)を親要素として、entry Widgetを作成する。 61# textvariable : csvファイルパスを格納する変数を代入。 62# Entryについて : https://kuroro.blog/python/PUZp77YFxrXvMCjpZbUg/ 63fileBox = ttk.Entry(mainFrm, textvariable=csvFilePath) 64# frame Widget(Frame)を親要素として、button Widgetを作成する。 65# text : テキスト情報 66# command : ボタンをクリックした際に、実行する関数を設定する 67# Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/ 68fileBtn = ttk.Button(mainFrm, text="参照", command=askCsvFile) 69# frame Widget(Frame)を親要素として、button Widgetを作成する。 70# text : テキスト情報 71# command : ボタンをクリックした際に、実行する関数を設定する 72# Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/ 73appBtn = ttk.Button(mainFrm, text="実行", command=app) 74 75# frame Widget(Frame)を親要素として、label Widgetをどのように配置するのか? 76# gridについて : https://kuroro.blog/python/JoaowDiUdLAOj3cSBxiX/ 77fileLabel.grid(column=0, row=0, pady=10) 78# frame Widget(Frame)を親要素として、entry Widgetをどのように配置するのか? 79# gridについて : https://kuroro.blog/python/JoaowDiUdLAOj3cSBxiX/ 80fileBox.grid(column=1, row=0, sticky=tkinter.EW, padx=5) 81# frame Widget(Frame)を親要素として、button Widgetをどのように配置するのか? 82# gridについて : https://kuroro.blog/python/JoaowDiUdLAOj3cSBxiX/ 83fileBtn.grid(column=2, row=0) 84# frame Widget(Frame)を親要素として、button Widgetをどのように配置するのか? 85# gridについて : https://kuroro.blog/python/JoaowDiUdLAOj3cSBxiX/ 86appBtn.grid(column=1, row=2) 87 88# 配置設定 89# columnconfigure, rowconfigureについて : https://blog.narito.ninja/detail/7 90mainWin.columnconfigure(0, weight=1) 91# columnconfigure, rowconfigureについて : https://blog.narito.ninja/detail/7 92mainWin.rowconfigure(0, weight=1) 93# columnconfigure, rowconfigureについて : https://blog.narito.ninja/detail/7 94mainFrm.columnconfigure(1, weight=1) 95 96# メインウィンドウを継続的に表示するために利用 97# mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/ 98mainWin.mainloop()

ご確認のほど、よろしくお願いいたします。????‍♂️

投稿2021/06/10 22:37

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問