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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

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

Python

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

Q&A

解決済

1回答

574閲覧

python  CSV 繰り返し

ryosuke0313

総合スコア65

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2022/10/01 05:27

編集2022/10/02 14:14

実現したいこと

3つのCSVファイルの読み込みを行い、下記のコードからフラッシュカードを作りたいです。
下記のコードでは、1つのCSVファイル(一列目=s,二列目=k)から実行していますが、
1つのCSVファイル読み込み→実行→2つ目のCSVファイル読み込み→実行→3つ目のCSVファイル読み込み→実行
のようなことが行いたいです。

python

1import time 2import tkinter as tk 3import random 4import time 5import timeout_decorator 6import tkinter 7#pandasを読み込む 8import pandas as pd 9#input file name 10#input_file_name= r'C:\Users\ryous\test(数字)\test(仮)1.csv' 11#input_book1 = {} 12 13#xls book Open (xls, xlsxのどちらでも可能) 14for num in ['1', '2', '3']: 15 input_book1 = pd.read_csv(f'path6-{num}.csv',encoding="utf-8-sig") 16 input_book=input_book1.sample(frac=1) 17 18 a= input_book ['suji'].to_list() 19 b= input_book ['数字'].to_list() 20 21 word_len = len(a) 22 23 24 25 26 class Frame(tk.Frame): 27 def __init__(self, master=None): 28 tk.Frame.__init__(self, master) 29 self.count = random.randint(0, (word_len - 1) ) 30 #self.count = 0 31 self.e_j = 1 32 self.sleep_1 = 4 # 上段表示時間 33 self.sleep_2 = 2 # 下段表示時間 34 self.fr_t() 35 self.fr_show() 36 37 # フレーム表示 38 39 def fr_t(self): 40 self.master.geometry('800x300') # フレーム枠(よこ×たて)の大きさ 41 self.master.title('数字暗記') # タイトル名 42 self.master.resizable(0,0) # フレーム枠サイズ変更禁止 43 44 # 上段表示 45 def fr_writeA(self, m_text): 46 string = (' '* 80) 47 tk.Message(text=string, font=('Helevetica', 16), width=400).place(x=20, y=20) 48 tk.Message(text=string, font=('Helevetica', 16), width=400).place(x=20, y=50) 49 tk.Message(text=m_text, fg='black',font=('Helevetica', 16), width=400).place(x=20, y=20) 50 51 # 下段表示 52 def fr_writeB(self, m_text): 53 tk.Message(text=m_text, fg='black',font=('Helevetica', 16), width=400).place(x=20, y=50) 54 55 # 表示 56 def fr_show(self): 57 58 if self.e_j == 1: # 上段表示 59 self.fr_writeA(a[self.count]) 60 time.sleep(self.sleep_1) 61 else: # 下段表示 62 self.fr_writeB(b[self.count]) 63 time.sleep(self.sleep_2) 64 self.count += 1 65 66 self.e_j *= -1 67 if self.count == word_len: 68 self.count = 0 69 #self.count = random.randint(0, (word_len - 1) ) 70 71 72 self.after(100, self.fr_show) 73 74if __name__ == '__main__': 75 root = Frame() 76 77 #root.title('このウインドウは自動的に閉じます') 78 79 #10秒後にウインドウを閉じる 80 root.after(10000, lambda: root.destroy()) #ミリ秒 81 82 root.mainloop()

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

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

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

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

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

y_waiwai

2022/10/01 05:31

3回したいなら、3回のループでそれを実行すればいいですが、これになにがわからないというはなしでしょうか
ryosuke0313

2022/10/01 06:12

繰り返しを行ったのですが、1,2,3のCSVを読み込み、実行されてしまいます。 私は、1つのCSVファイル読み込み→実行→2つ目のCSVファイル読み込み→実行→3つ目のCSVファイル読み込み→実行の繰り返しを行いたいです。
TakaiY

2022/10/01 06:21 編集

繰り返してだめだったときのコードを提示していただけますか。
ryosuke0313

2022/10/01 06:36 編集

質問の欄に記載しているコードで繰り返しを行ったつもりが、3つ目のものしか読み込めていませんでした。
guest

回答1

0

ベストアンサー

繰り返す場所が間違えています。

python

1csvを順に読み込み 1, 2, 3 2 a,b を設定 3 class Frameを定義 4 ※ ループ終了 5if __name__ == '__main__': (実際の処理開始) 6 7Frameのインスタンスを作成 810秒後に閉じるように設定 9Frameを開始

こうなっていますので、Frameを3回定義しただけで、1回しか実行していません。
また、そのときのa, bは 3番目のファイルのデータになっているはずです。

csvの読み込みを、実際の処理開始以降のとcろで実行すればいいんじゃないかと思います。

python

1class Frameを定義 2if __name__ == '__main__': (実際の処理開始) 3 4csvを順に読み込み 1, 2, 3 5 a,b を設定 6 Frameのインスタンスを作成 7 10秒後に閉じるように設定 8 Frameを開始 910秒で停止すればループに戻る

ただ、Frameの作りが今一ついけてないですね。
これくらいちゃんと作り込んでいるのであれば、データの読み込みもメソッドとして実装すれば繰り返し実行もきれいに書けると思います。

外部の変数になっているa, b (この名前も変えるべき)をインスタンス変数にして、read_from_csv(<CSVファイル名>) というようなメソッドを追加して、指定したファイルの内容を読んで a,bに設定するようにする。
10秒たったらdestroy()するのもうまくイベント処理しなければなりませんね。

投稿2022/10/01 06:37

編集2022/10/01 06:38
TakaiY

総合スコア12666

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

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

ryosuke0313

2022/10/01 07:22

回答ありがとうございます。実行できました。 ちなみに、1つのCSVファイル読み込み→実行→2つ目のCSVファイル読み込み→実行→3つ目のCSVファイル読み込み→実行 の流れをもう一度繰り返したい場合は、新たな変数のfor文でかけるのでしょうか。
TakaiY

2022/10/01 09:56

そうですね。 ファイル読み込みのループの外で、 for _ in range(2): などでループを回してやればいいでしょう。
ryosuke0313

2022/10/02 05:14

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問