こんにちは。Python3のコードに関して質問があります。
###状況と該当のソースコード
| 行番号 | 数値1 | 数値2 |
|---|---|---|
| 1 | 0.5E+2 | 0.7 |
| 2 | 0.51E+2 | 0.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
よろしくお願いいたします。
試しに1番から10番まで入ったテキストファイルだとどのような結果になりますか?
元ファイルとdiffを取ってみるとなにかわかるかも。 $ hoge.py | diff label.txt -
コメントありがとうございます。試してみましたが、正常に1番から10番まで表示して止まりました。
2万番までの方のテキストファイルは、77.3MBもありました…データが大きすぎるとこのようなことが起こるのでしょうか?
データの大きさは問題ないです。面倒ですが、百行、千行、1万行のファイルで試していただけないでしょうか?
@rogueref さん。コメントありがとうございます。すみません、diffをとる方法がよくわからないのですが$hope〜というのをどのように使えばよいのでしょうか?
当該コードが"hoge.py"だと仮定すると上記コマンドで元ファイルと出力値のdiffがとれます。
@can110さん。 百行、千行、一万行全て問題なく止まりました。
では最後に2万件のテキストファイルを「もう一度作成しなおして」実行してみてください。データ内容は元ファイルと同じでよいです。
あと実行環境(OSなど)も追記いただけると適切な回答得られやすくなります。
@can110さん。二万行も問題ありませんでした。また、実行環境についてご指摘ありがとうございます。macOS Mojaveを使用しています。
あとは元のlabel.txtと問題なかったファイルのdiffをとり、違いがないか確認ください。(違いはないはず)
2万行でファイルが77.3MBあるなら、1行が4000バイトぐらいある計算です。それはあなたの認識と一致しますか?
@can110さん。diffをとってみたところ、問題の動作と同じように、ストップせず表示し続けてしまいました。
「diff label.txt test.txt」のように、ファイル同士を比較してください。
回答2件
あなたの回答
tips
プレビュー