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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

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

Q&A

解決済

1回答

1366閲覧

jupyterでDBファイルが読み込めない

gunmed

総合スコア55

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

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

0グッド

0クリップ

投稿2019/03/15 08:47

編集2019/03/15 12:42

以下のようにjupyter notebookでDBファイルを参考書の通り、読み込もうとしました。

import os import pandas as pd from urllib.request import urlopen import sqlite3 base_url = '/Users/name/Documents/python/jupyter実践入門/sample-data-master/anime' anime_db = os.path.join(base_url, 'anime.db') res = urlopen(anime_db) with open('anime.db', 'wb') as f: f.write(res.read()) with sqlite3.connect(f.name) as conn: df = pd.read_sql('SELECT * FROM anime', conn)

すると、以下のようなエラーが生じてしまいます。

--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-5-9e7397a768cb> in <module> 7 base_url = '/Users/name/Documents/python/jupyter実践入門/sample-data-master/anime' 8 anime_db = os.path.join(base_url, 'anime.db') ----> 9 res = urlopen(anime_db) 10 with open('anime.db', 'wb') as f: 11 f.write(res.read()) /anaconda3/envs/jupyter-env/lib/python3.6/urllib/request.py in urlopen(url, data, timeout, cafile, capath, cadefault, context) 221 else: 222 opener = _opener --> 223 return opener.open(url, data, timeout) 224 225 def install_opener(opener): /anaconda3/envs/jupyter-env/lib/python3.6/urllib/request.py in open(self, fullurl, data, timeout) 509 # accept a URL or a Request object 510 if isinstance(fullurl, str): --> 511 req = Request(fullurl, data) 512 else: 513 req = fullurl /anaconda3/envs/jupyter-env/lib/python3.6/urllib/request.py in __init__(self, url, data, headers, origin_req_host, unverifiable, method) 327 origin_req_host=None, unverifiable=False, 328 method=None): --> 329 self.full_url = url 330 self.headers = {} 331 self.unredirected_hdrs = {} /anaconda3/envs/jupyter-env/lib/python3.6/urllib/request.py in full_url(self, url) 353 self._full_url = unwrap(url) 354 self._full_url, self.fragment = splittag(self._full_url) --> 355 self._parse() 356 357 @full_url.deleter /anaconda3/envs/jupyter-env/lib/python3.6/urllib/request.py in _parse(self) 382 self.type, rest = splittype(self._full_url) 383 if self.type is None: --> 384 raise ValueError("unknown url type: %r" % self.full_url) 385 self.host, self.selector = splithost(rest) 386 if self.host: ValueError: unknown url type: '/Users/name/Documents/python/jupyter実践入門/sample-data-master/anime/anime.db'

unknown urlの解決方法がググってもよくわからず、ここに質問させていただきます。
よろしくお願いします。

mac 10.14.1
jupyter notebook 5.7.4

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

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

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

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

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

guest

回答1

0

ベストアンサー

URLではなくファイルパスを渡しているのがそもそも変ですが、本当にそれで参考書の通りの記述になっていますか? 本の名前とページ数、当該ページのスキャンか写メを貼ってもらえると助言しやすいかもしれません。

httpなどから始まるURLを渡すべきだと思うんですがねぇ。

投稿2019/03/15 15:18

hayataka2049

総合スコア30933

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

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

hayataka2049

2019/03/15 15:19

ValueError: unknown url type: URLのフォーマットとして解釈できなかった、と言っています。
gunmed

2019/03/15 16:12

回答ありがとうございます。 'http://raw.githubusercontent.com/practical-jupyter/sample-data/master/anime/' のように変更し、df.head()を追加したら、無事表示できました。 参考書は、pythonユーザーのためのjupyter実践入門(2017年9月発行)の102ページなのですが、コード自体に間違いはないです。(import os import pandas as pdは別ページにて、該当のcell以外に記述してあったので、一応質問のために、該当cellに追加しました。) p84ページの説明では、URL('http://raw.githubusercontent.com/practical-jupyter/sample-data/master/anime/')を渡すとしているのですが、ネット環境がなければ、ダウンロードしたファイルパスを参照してくださいとなっていて、意味もなく後者を選んでしましました。 csvファイルやエクセルファイルはファイルパスでも読み込めていたので、今回のDBファイルが開けなくて困ってしまったという流れです。 普通はURLを渡すのですね、知りませんでした。
gunmed

2019/03/15 16:13

すみません、&#039;は不要です。
hayataka2049

2019/03/15 16:17

URLがどちらも繋がらないようです(&#039;など削除しても)。
hayataka2049

2019/03/15 16:18

res = urlopen(anime_db) with open('anime.db', 'wb') as f: f.write(res.read()) anime.dbを落としてきて同名ファイルに書いているだけだと思うので、落としたファイルでやるならきっとここは端折って with sqlite3.connect("/path/to/anime.db") as conn: df = pd.read_sql('SELECT * FROM anime', conn) でいい気がしますが、そういう意味ではなくて?
gunmed

2019/03/19 09:13

すみません、無事繋がり解決したと思い、しばらくteratailをみてませんでした。なので、hayataka2049さんの質問に気づきませんでした。申し訳ありません。 繋がらないのですか?? 上記のURLをコピーして、googleに貼り、不要なところを消して、anime.dbを加えると繋がって、データベースがダウンロードされます!それとは別のことでしょうか。 with sqlite3.connect(f.name) as conn: df = pd.read_sql('SELECT * FROM anime', conn) が何を表してるのかが参考書に一切説明がなく、ただ写経しただけなので、何を意味しているのか実は、理解できてません。SELECTとかsqlite3.connectとか今調べてみても、すぐにはピンとこず、質問に答えられない状況です。勉強不足ですみません、、、
hayataka2049

2019/03/19 12:25

URLについてはanime.dbを繋げたらアクセスできたので大丈夫です。 >が何を表してるのかが参考書に一切説明がなく、ただ写経しただけなので、何を意味しているのか実は、理解できてません。 anime.dbはsqliteのデータベースを表すファイルそのものです。sqliteはデータベースをファイル一つで表現します。 要するにローカルにanime.dbがあれば動きます。外側のwithは、「anime.dbの中身をweb上から落として(res.read()で)同名ファイルに書く」ということをやっているだけです。なので、「ダウンロードしたファイルパスを参照してください」というのは、外側のwithを消して直接anime.dbのパスを内側のwithのopenの引数に書いておけ、という旨だと思います。
gunmed

2019/03/20 13:04

なるほど、端折ってという意味はそういう意味だったのですね。落としてあるなら外側のwithは確かにいらないですね。 おかげさまでやっと理解できました。非常に勉強になりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問