こんにちは。pythonプログラムを勉強しはじめたばかりのものです。
次のプログラムが最後の行の#のところでエラーになってなかなか
解決ができません。アドバイスいただけませんでしょうか。
#! /python30/python
# coding:shift_jis
import sys, os, urllib, gzip
def GetAndGzip(url, out):
''' urlを読み込み、gzipで圧縮してファイルoutに出力
'''
remote = urllib.urlopen(url).read()
gzfile = gzip.GzipFile(filename='', mode='web', fileobj=out)
gzfile.write(remote)
gzfile.colse()
#パラメータを抽出
if len(sys.argv) <> 2:
print '使い方:python wgetgz.py url'
else:
url = sys.argv[1]
GetAndGzip(url, sys.stdout) #ここでエラーin<module>
#ここで投稿すると、インデントがなくなってしまうようです。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
すみません。
ちょっと開きました。#1の補足にあったスクリプトで試してみましたが、
補足にあるようなエラーにはなりませんでした。
圧縮されたバイナリが画面に出てきて、ぐちゃぐちゃに。
とはいえ#1でわたしがつけたスクリプトですが、
____gzfile.colse()
これは
____gzfile.close()
の間違いでした。
でもこれだけでは補足にあるメッセージにはならないんですよねえ。
もうちょっと調べさせてください。
No.1
- 回答日時:
あ、二つあったんですか。
こっちは見落としてた。
えと、
#! /python30/python
とあるので、3.0で動かそうとしているのかもしれませんが、
2.xから3.0へのバージョンアップに伴い変わった部分に引っかかっているのがあります。
ひょっとしてもとは2.x用のスクリプトを書き写したとかではないですか?
import sys, os, urllib, gzip
3.0 では、urllib ではなく urllib.request を import してください。
そして呼び出し部分にも request を追加してください。
remote = urllib.urlopen(url).read()
↓
remote = urllib.request.urlopen(url).read()
3.0では等しくないという検査をする演算子に<>を使えなくなりました。
if len(sys.argv) <> 2:
↓
if len(sys.argv) != 2:
文字列の扱いが変わったので、標準出力(sys.stdout)に圧縮結果のような
バイナリイメージを出力できなくなりました。
GetAndGzip(url, sys.stdout)
↓
GetAndGzip(url, sys.stdout.buffer)
以上の変更を行えばきちんと動くようになると思います。
3.0は大きなバージョンアップが行われたばかりなので、ネットで探しても
3.0では事情が変わってそのまま使えないというものが見つかりやすいと思います。
今3.0でなければならないという理由がなければ、
2.6系列(今の最新は2.6.1?)を使った方が良いと思います。
import sys, os, urllib, gzip
import urllib.request
def GetAndGzip(url, out):
____''' urlを読み込み、gzipで圧縮してファイルoutに出力
____'''
____remote = urllib.request.urlopen(url).read()
____#remote = urllib.urlopen(url).read()
____gzfile = gzip.GzipFile(filename='', mode='web', fileobj=out)
____gzfile.write(remote)
____gzfile.colse()
#パラメータを抽出
if len(sys.argv) != 2:
____print('使い方:python wgetgz.py url')
else:
____url = sys.argv[1]
GetAndGzip(url, sys.stdout.buffer) #ここでエラーin<module>
行頭の空白はなくなってしまうので、_で置き換えてます。
この回答への補足
ご指摘ありがとうございます。
使っているPYTHONのバージョンが3.0で
勉強しているテキストがバ-ジョン2.6をベースに書かれているようです。
ところで、テキストを次のように変えたのですが、
やはり、同じく最後の行でエラーになります。
すいませんが、アドバイスいただけると有難いです。
#! /python30/python
# coding:shift_jis
import sys, os, urllib, gzip
import urllib.request
def GetAndGzip(url, out):
''' urlを読み込み、gzipで圧縮してファイルoutに出力
'''
remote = urllib.request.urlopen(url).read()
gzfile = gzip.GzipFile(filename='', mode='web', fileobj=out)
gzfile.write(remote)
gzfile.colse()
#パラメータを抽出
print(len(sys.argv))
if len(sys.argv) != 2:
print('使い方:python wgetgz.py url') #print文修正
else:
url = sys.argv[1]
GetAndGzip(url, sys.stdout.buffer) #ここでエラーin<module>
# この後はDOS窓でみたエラーの状況
C:\PythonProg>wgetgz.py http://www.yahoo.com
2
Traceback (most recent call last):
File "C:\Python30\lib\urllib\request.py", line 1067, in do_open
h.request(req.get_method(), req.get_selector(), req.data, header
File "C:\Python30\lib\http\client.py", line 862, in request
self._send_request(method, url, body, headers)
File "C:\Python30\lib\http\client.py", line 906, in _send_request
self.endheaders()
File "C:\Python30\lib\http\client.py", line 857, in endheaders
self._send_output(message_body)
File "C:\Python30\lib\http\client.py", line 715, in _send_output
self.send(msg)
File "C:\Python30\lib\http\client.py", line 669, in send
self.connect()
File "C:\Python30\lib\http\client.py", line 653, in connect
self.timeout)
File "C:\Python30\lib\socket.py", line 292, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.gaierror: [Errno 11001] getaddrinfo failed
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\PythonProg\wgetgz.py", line 21, in <module>
GetAndGzip(url, sys.stdout.buffer) #ここでエラーin<module>
File "C:\PythonProg\wgetgz.py", line 10, in GetAndGzip
remote = urllib.request.urlopen(url).read()
File "C:\Python30\lib\urllib\request.py", line 122, in urlopen
return _opener.open(url, data, timeout)
File "C:\Python30\lib\urllib\request.py", line 358, in open
response = self._open(req, data)
File "C:\Python30\lib\urllib\request.py", line 376, in _open
'_open', req)
File "C:\Python30\lib\urllib\request.py", line 336, in _call_chain
result = func(*args)
File "C:\Python30\lib\urllib\request.py", line 1082, in http_open
return self.do_open(http.client.HTTPConnection, req)
File "C:\Python30\lib\urllib\request.py", line 1070, in do_open
raise URLError(err)
urllib.error.URLError: <urlopen error [Errno 11001] getaddrinfo fail
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのWebスクレイピングでfind_allだとurlがNoneに 4 2022/04/17 18:21
- その他(プログラミング・Web制作) ラズパイ上の、pythonのエラーについて 1 2023/04/12 23:27
- その他(プログラミング・Web制作) Pythonのライブラリ、randomについて 3 2022/09/20 14:30
- Ruby パイソンエラーについて 1 2022/12/24 14:07
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
- その他(プログラミング・Web制作) pythonをjupiter notebookからmecabで頻出の高い単語の抽出について(Runt 1 2022/12/17 18:08
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# pythonで外部のファイルを読み込む際のエラー 2 2022/04/12 19:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.err. printlnとSystem.o...
-
System.out.printlnの意味がよ...
-
1~100までの数字を表示し、か...
-
System.out.printlnの出力先
-
Java 九九の表について
-
Eclipseのコンソールを常に表示...
-
javaのwhile文で九九の表
-
flush()とclose()について
-
Javaで改行などが出来ないのです。
-
文字の順番を昇順に
-
system.out.printが出力されない
-
行列の表示
-
JAVAのServletで、画像表示につ...
-
Log4jで機能毎に別ファイルへ出...
-
Javaで任意のパスへ任意のファ...
-
一定のスペースを空けて端を揃...
-
HashMapの内容
-
OutputStreamの内容を確認する...
-
ArrayListによる計算表作成
-
JavaScriptの変数をjavaのメソ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.err. printlnとSystem.o...
-
Log4jで機能毎に別ファイルへ出...
-
System.out.printlnの出力先
-
Eclipseのコンソールを常に表示...
-
Javaで改行などが出来ないのです。
-
flush()とclose()について
-
system.out.printが出力されない
-
1~100までの数字を表示し、か...
-
StringBufferで改ページ処理を...
-
InputStreamはreadが1回しかで...
-
JavaScriptの変数をjavaのメソ...
-
Tomcatが無応答となる現象が起...
-
1~100までの数字を表示したい
-
switch分が機能しません。
-
数字文字列をパック10進数に変...
-
VBSエラー"オブジェクト型の変...
-
Apache POI のログについて
-
System.out.printlnの意味がよ...
-
Javaの問題なのですが、 永久ル...
-
OpenSSL関数エラーについて
おすすめ情報