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

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

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

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

Python

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

Q&A

解決済

2回答

359閲覧

【Python3】ファイルを正常に開けない

balckbell

総合スコア16

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2018/11/21 07:42

編集2018/11/21 08:39

こんにちは。Python3のコードに関して質問があります。

###状況と該当のソースコード

行番号数値1数値2
10.5E+20.7
20.51E+20.8

のような情報が1番から2万番まで入ったテキストファイルを読み込むコードを、Python3で書きました。
ソースコードは以下の通りです。(下記のコード以外はコメントしか書き加えていません。追記:米時間で12:37am)

Python3

1ifile = 'lab1.txt' 2f = open(ifile, 'r') 3if f.mode == 'r': 4 contents = f.read() 5 print (contents)

###問題
コンパイルした結果、元々のテキストファイルにはない3万番や4万番を超えても次々と情報が表示されていき、止まりませんでした。1番から2万番きっかりまで表示してコンパイルが止まるようにするには、どのように修正すればよいでしょうか?

###実行環境(追記:米時間で12:37am)
macOS Mojave
(他にはどのような情報が必要でしょうか?)

###参考にしたウェブサイト

https://www.guru99.com/reading-and-writing-files-in-python.html#3

よろしくお願いいたします。

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

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

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

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

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

can110

2018/11/21 07:45

試しに1番から10番まで入ったテキストファイルだとどのような結果になりますか?
rogueref

2018/11/21 07:58

元ファイルとdiffを取ってみるとなにかわかるかも。 $ hoge.py | diff label.txt -
balckbell

2018/11/21 08:01

コメントありがとうございます。試してみましたが、正常に1番から10番まで表示して止まりました。
balckbell

2018/11/21 08:02

2万番までの方のテキストファイルは、77.3MBもありました…データが大きすぎるとこのようなことが起こるのでしょうか?
can110

2018/11/21 08:05

データの大きさは問題ないです。面倒ですが、百行、千行、1万行のファイルで試していただけないでしょうか?
balckbell

2018/11/21 08:10

@rogueref さん。コメントありがとうございます。すみません、diffをとる方法がよくわからないのですが$hope〜というのをどのように使えばよいのでしょうか?
rogueref

2018/11/21 08:13

当該コードが"hoge.py"だと仮定すると上記コマンドで元ファイルと出力値のdiffがとれます。
balckbell

2018/11/21 08:16

@can110さん。 百行、千行、一万行全て問題なく止まりました。
can110

2018/11/21 08:23

では最後に2万件のテキストファイルを「もう一度作成しなおして」実行してみてください。データ内容は元ファイルと同じでよいです。
can110

2018/11/21 08:24

あと実行環境(OSなど)も追記いただけると適切な回答得られやすくなります。
balckbell

2018/11/21 08:32

@can110さん。二万行も問題ありませんでした。また、実行環境についてご指摘ありがとうございます。macOS Mojaveを使用しています。
can110

2018/11/21 08:36

あとは元のlabel.txtと問題なかったファイルのdiffをとり、違いがないか確認ください。(違いはないはず)
quickquip

2018/11/21 08:55 編集

2万行でファイルが77.3MBあるなら、1行が4000バイトぐらいある計算です。それはあなたの認識と一致しますか?
balckbell

2018/11/21 08:51

@can110さん。diffをとってみたところ、問題の動作と同じように、ストップせず表示し続けてしまいました。
can110

2018/11/21 08:53

「diff label.txt test.txt」のように、ファイル同士を比較してください。
guest

回答2

0

質問のコードで終わらないわけがないので可能性を考えてみました。

  • 本当に対象ファイル20,000行でしょうか。
$ wc -l label.txt
  • 示されたコード以外にもなにかループがあるのでは

質問のコードの外側にループがあって、終了条件がなかったりおかしかったりするのでは。

while(1): 当該コード
  • 標準コマンドで出力してみるとどうなるでしょう。
$ cat label.txt

投稿2018/11/21 08:15

rogueref

総合スコア727

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

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

balckbell

2018/11/21 08:25

1.本当に2万行か? 簡単のため2万行としましたが、実際は21,338行です。ただ、3万、4万を越えても表示は止まりませんでした。(これは止まらないだろうと思い4万を超えたところでターミナルを閉じました) 2.他にもループがあるか? ありません。コードは上に示したものとコメントのみを含みます。 3.標準コマンド出力 試してみます。 ※教えていただいたように $ hoge.py | diff label.txt - を試してみたのですが、コンパイルした時と同じように止まることなく表示し続けてしまいました。
rogueref

2018/11/21 09:01

面白いですね。label.txtのEOFがなんだか壊れてるのかも。catで全行正常に出力されるのなら。$ cat label.txt > label2.txt としてから label2.txt を対象にしてみてはどうでしょ。
balckbell

2018/11/21 09:09

申し訳ありません。元のテキストファイルを確認してみたところ、行番号が昇順になっていませんでした。行数を数える際に一番上から下まで一気にスクロールして確認したので気づきませんでした…。本当に申し訳ありません。 もう一度コンパイルしたところ、(恐らく)正常に作動しました。(恐らくといったのは、データ数が多すぎて、ターミナル上でコンパイル結果の一番最初のデータまで遡れなかったからです(ある一定の場所でスクロールができなくなってしまいました。)) お時間を割いていただいたこと、ありがとうございました。また、初歩的なミスで混乱させてしまい申し訳ありませんでした。
guest

0

自己解決

皆様、ご回答ありがとうございました。
先ほど元の問題のテキストファイルを確認したところ、行番号が昇順になっていないということが判明しました。行数を数える際に一番上から一番下まで一気にスクロールしてしまったので、間の順番が乱れているところに気づけませんでした。一番から再度カウントが始まったり、中途半端な数字から再度カウントが始まったりということが起きていました。

それを踏まえてコンパイルしたところ、実は問題なく動いていることがわかりました。
初歩的なミスのせいで皆様を混乱させてしまい大変申し訳ありませんでした。今後このようなミスはしないよう気をつけて勉強していきます。
ご協力、本当にありがとうございました。

投稿2018/11/21 09:14

balckbell

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問