🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

パス

パス(path)はファイルシステムの場所(階層)を明示したものです。

Python

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

Q&A

解決済

3回答

5619閲覧

Pythonでファイルが読み込めなくて困ってます

Imamuu.is

総合スコア13

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

パス

パス(path)はファイルシステムの場所(階層)を明示したものです。

Python

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

0グッド

0クリップ

投稿2019/09/13 10:39

Pythonでopen()で、絶対パスでファイルを読み込もうとしているのですが、FileNotFoundError: [Errno 2] No such file or directory:と返ってきてしまいます。

念の為、コマンドラインで同じ絶対パスでファイルを開くと、うまく表示されます。

どこに問題があるのか見当がつく方がいらっしゃいましたら、教えてください

開発環境はMacを、Pythonのバージョンは3.7です。

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

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

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

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

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

SEI.__name

2019/09/13 10:46

あなたが書いたコードを貼ってください。
Imamuu.is

2019/09/13 10:54

ネットの情報を見ながら、それを書き換えて書いたので、つっこみどころだらけかもですが、参考にどうぞ import sys import json # Load Json File with open('~/Downloads/Tripadviser_data_json/{}'.format(sys.argv[1]), 'r') as f: data = json.load(f) HotelsInfo = [] HotelID = ['HotelID'] HotelName = ['Name'] Price = ['price'] Address = ['Address'] HotelsInfo.append([HotelID, HotelName, Price, Address]) import csv #Write CSV with open('HotelsInfoTest.csv','w',newline='') as csvFile: csvwriter = csv.writer(csvFile, delimiter=',',quotechar='"', quoting=csv.QUOTE_NONNUMERIC) csvwriter.writerow('HotelsInfo') これを、コマンドラインで Python3 プログラミングのファイル名.py 読み込むファイル名.json と入力しました
guest

回答3

0

ベストアンサー

openのパラメーターとして~(チルダ)は使えないと思います。
os.path.expanduser('~')で展開してから渡してみてください。

Python

1import sys 2import json 3import os.path 4 5# Load Json File 6 7with open(os.path.expanduser('~') + '/Downloads/Tripadviser_data_json/{}'.format(sys.argv[1]), 'r') as f:

コマンドラインの時にうまくいくのはシェルが展開してチルダを含まない絶対パスに変換してからわたしてくれるからだと思います。

投稿2019/09/13 11:10

編集2019/09/13 11:31
nomuken

総合スコア1627

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

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

CabbageLettuce

2019/09/13 11:34

os.path.join() を使うとOSによってパスの区切り文字を自動判別してくれます 例えばLinux系なら「/」に、 Windowsなら「\」にしてくれます with open(os.path.join(os.path.expanduser('~') + '/Downloads/Tripadviser_data_json/{}'.format(sys.argv[1])), 'r') as f: というのはいかがでしょうか?
otn

2019/09/13 12:49

↑os.path.joinの機能を使っていませんね。タイプミス?
guest

0

たんに間違えてパス書いてるんでしょう。よくあることです


with open('~/Downloads/Tripadviser_data_json/{}'.format(sys.argv[1]), 'r') as f:

チルダを使わないで、ルートからのフルパス書いてみたらどうなるでしょうか

with open('HotelsInfoTest.csv','w',newline='') as csvFile:

カレントディレクトリにそのファイルを作成しますが、カレントディレクトリがどこにあるかを調べてみてはどうでしょう。
書き込み権限がないところだと失敗しますね

投稿2019/09/13 10:54

編集2019/09/13 11:28
y_waiwai

総合スコア88038

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

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

0

対策

open 関数に相対パスを書く場合は、
Python のスクリプトを起動したディレクトリからの相対パスを書いてください。

具体的には以下のコードを追記して
print 関数で表示されたディレクトリからの相対パスを記述してください。

python

1import os 2print(print(os.getcwd())

原因

Python の open 関数は相対パスを記述した場合...

Python を起動したカレントディレクトリからファイルを探します。
Python のスクリプトがあるディレクトリからファイルを探しません。

投稿2019/09/13 11:11

nico25

総合スコア830

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問