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

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

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

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

Q&A

解決済

2回答

3993閲覧

python 実行されるが永遠に終わらない

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

0クリップ

投稿2019/05/20 16:55

編集2019/05/21 02:30

python

1# -*- coding: utf-8 -*- 2import sys, csv, operator 3import pandas as pd 4 5#mycsv = csv.reader(open('analyze2.csv'),delimiter=',') 6df = pd.read_csv('analyze2.csv',header=None) 7 8for i in range(0,66999): 9 value = df.iloc[i,0]#i行目の左列の取得 10 print('#print0',i) 11 print('#print1',value) 12 if value == 1: 13 method1 = df.iloc[i,1] #i行目の中央列の取得 14 c = 1 15 method2 = df.iloc[i+c,1] #i+c中央列の取得 16 while(method1 != method2): 17 c += 1 18 method2 = df.iloc[i+c,1] #i+c行目の中央列の取得 19 print('#print2') 20 print('#print3',c) 21 co = df.iloc[i+c] #i+c行目だけを取得 22 print('#print4') 23 redf = pd.concat([df[0:i],co]) #結合(dfデータの0からi行目まで+取得した行列) 24 df = pd.concat([redf,df[i+1:66999]]) #結合(redf+dfデータのi+1行目から最後の66999行目まで) 25 df.drop(i+c+1) #i+c+1行目のデータをnewdfから削除 26 27 else: 28 continue 29 print('#print5') 30

出力内容は以下の様になりました。(途中まで)
2回目と3回目のprint1の出力箇所が中央列と右列の表示なっているのが問題です。value1は左列しか表示しない様にしていたのですが...

#print0 0 #print1 1 #print3 1 #print4 #print5 #print0 1 #print1 convert orig/00000002.png -crop 1280x600+0+0 crop/00000002.png #print0 2 #print1 1558070265.8343878 #print0 3 #print1 2 #print0 4 #print1 1 #print3 1 #print4 #print5 #print0 5 #print1 convert orig/00000001.png -crop 1280x600+0+0 crop/00000001.png

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

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

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

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

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

guest

回答2

0

ベストアンサー

とりあえずですが、書き込みでうまくいかないようであれば、そのままstdoutに吐き出させてください。

python

1python3 sort.py

投稿2019/05/20 17:14

hayataka2049

総合スコア30933

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

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

退会済みユーザー

退会済みユーザー

2019/05/20 17:33 編集

ご回答ありがとうございます。 stdoutではprintが出力されました。 'goal'というprintが9回出力されてから、何も出力されなくなりました。 1 a goal 2 1 a goal 2 1 a goal 2 1 a goal 2 1 a goal 2 1 a goal 2 1 a goal 2 1 a goal 2 1 a goal 2 1 a 以上が出力内容です。
hayataka2049

2019/05/20 17:31

少なくとも print(value) #printデバック で出してるものは出るじゃろと思うわけですが。
hayataka2049

2019/05/20 17:44

以下2点修正依頼です。 ・printデバッグするなら最低限各printが識別できるようにしてください。print("#print1", x)とか ・質問文のコードは信頼していいんでしょうか。goalの間に2行数字がprintされる要素がなさそうに見えます。ご確認ください。
退会済みユーザー

退会済みユーザー

2019/05/20 17:46 編集

print(value)は2や1に該当しているので出力されています。 しかし,2回目のgoalの出力後に書かれるprint(value)の値は1のはずなのですが(.csvデータの内容と照らし合わせ済み)、2と出力されてしまっている原因が分かりません... 確認してみます。
hayataka2049

2019/05/20 17:46 編集

さらに2つ追加。 ・出力が長くてコメント見づらくなるので質問文を編集して書いてほしい ・i, cなどループカウンタ系の変数は出てくるようにprintを追加
hayataka2049

2019/05/20 17:54

>しかし,2回目のgoalの出力後に書かれるprint(value)の値は1のはずなのですが(.csvデータの内容と照らし合わせ済み)、2と出力されてしまっている原因が分かりません... 1が予想される値だとして、2が出てくる理由がよくわかりません。コード上に該当部分がぱっと見ないし。 単純に示されてるコードが間違っているか、考えづらい気はするけどループ外のprint(df[1])がバッファリングの都合で遅れて出てきているとか。
hayataka2049

2019/05/20 18:14 編集

>質問文 修正確認しました。 あー、なるほど、continueされたときにprint('#print1',value)が連続するんですね。納得。 その状態で「何も出てこない状態になったまま実行が継続する」という理解でいいですか?
hayataka2049

2019/05/20 18:22 編集

質問文のコードはcopyメソッドの使い方を誤っているため(というか勘違いしているため)、結果的にですがdfのサイズがループ毎に(厳密にはdf = pd.concat([redf,df[i+1:]])が実行されるたびに)約2倍に膨れ上がります。10回でおよそ1000倍になりますので、破綻の原因になりえます。 実行中のメモリ消費量を確認してみてください。異常に膨れ上がってマシンに積んでいるメモリ量を越えていくようならそれが原因です。
退会済みユーザー

退会済みユーザー

2019/05/21 02:24

>修正確認しました。あー、なるほど、continueされたときにprint('#print1',value)が連続するんですね。納得。その状態で「何も出てこない状態になったまま実行が継続する」という理解でいいですか? print出力はされ流様になったのですがですが、実行が永遠に終わらないという状態です。 そして、print1でvalueが出力されるのは左列(1か2の値)のはずなのですが、2回目のprint1で中央列(convert orig/00000002.png -crop 1280x600+0+0 crop/00000002.png)、3回目で右列(1558070265.8343878)が表示されているのも問題になっています。
hayataka2049

2019/05/21 02:38

途中で止まる問題が解決したのでしたら、一旦こちらの質問は解決済みとして、改めて質問を立て直していただけないでしょうか。 意図と違う動作になっている、というのはまた別の問題ですし、解決するためにはそもそも何をするプログラムなのか説明していただく必要があるかもしれません。私が対応できる保証もありません。整理して別の質問にした方が良いです。
退会済みユーザー

退会済みユーザー

2019/05/21 02:39

分かりました。 ご指摘ありがとうございます。
guest

0

whileの世界で永遠に暮らしているのじゃないでしょうか。

投稿2019/05/20 16:59

hentaiman

総合スコア6415

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

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

退会済みユーザー

退会済みユーザー

2019/05/20 17:06

回答がありがとうございます。 そうすると、read.csvの後のprintが出力されない理由がわからないのですが…
hentaiman

2019/05/20 17:15

そのprintよりも下を全て削除して試したけど出力されなかったということですか?
退会済みユーザー

退会済みユーザー

2019/05/20 17:32 編集

そのままターミナルに出力されたらprintの内容が出力されました。 1 a goal 2 1 a goal 2 1 a goal 2 1 a goal 2 1 a goal 2 1 a goal 2 1 a goal 2 1 a goal 2 1 a goal 2 1 a 以上の様な出力がされたので、10回目のforのループがおかしいのかなと思っています。
hentaiman

2019/05/20 17:46

貼ってるコードそのまま実行したら少なくともwhileの中のprintが続くか、forが終わるまでwhileの外のprintが続きそうなもんですが、間違いなくここに貼ってあるコードをそのまま実行したんですか? CSVの10行目だけ除去したら動きますか?
退会済みユーザー

退会済みユーザー

2019/05/21 02:28

>貼ってるコードそのまま実行したら少なくともwhileの中のprintが続くか、forが終わるまでwhileの外のprintが続きそうなもんですが、間違いなくここに貼ってあるコードをそのまま実行したんですか? CSVの10行目だけ除去したら動きますか? 貼ってあるコード確実に実行しました。 質問文、編集したのでご確認いただけると幸いです。print出力の件は解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問