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

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

詳細はこちら
terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

ファイル

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

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

Q&A

解決済

2回答

7035閲覧

pythonでファイルが開けない

OrangeEX-Juice

総合スコア6

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

ファイル

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

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

0グッド

0クリップ

投稿2021/01/11 07:14

pythonのopen関数でファイルを下のようにすると[ファイルがありません]とエラーになります。

python

1w=open('script.py','r')

script.pyはDesktopの下にあります。絶対パスで実行したところしっかりファイルを開けたので、おそらくターミナルのように自分のいる位置関係しっかりしないとダメなのだろうと考えましたが、ネットや教材ではファイル名単体で開けていました。なぜでしょうか。pythonでも何か方法を使って移動しないといけないのですか?
環境はmacでatomを使っています。

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

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

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

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

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

guest

回答2

0

ベストアンサー

w=open('script.py','r')は、「カレントディレクトリにあるscript.pyを開く」という意味ですので、カレントディレクトリにそのファイルが無いとエラーです。

カレントディレクトリの表示:
print(os.getcwd())

カレントディレクトリの変更:
os.chdir("/xxxx/yyy/zz")

投稿2021/01/11 07:34

otn

総合スコア85886

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

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

OrangeEX-Juice

2021/01/11 08:31

回答ありがとうございます。なるほど、ではカレントディレクトリとは別にあるファイルを開きたい場合は、カレントディレクトリを変更、もしくはファイルをカレントディレクトリにもってくるということですね。ただ、カレント以外のファイルを開きたい時はたくさんありますよね(もしなかったらすみません)。そういった場合は毎回上記の方法を行ってから開いてきるのでしょうか。少しめんどくさいと思うのですが、それ以外の方法が何かあるのでしょうか。
otn

2021/01/11 08:40

カレントディレクトリ以外にあると言うことは、その場所を知っていると言うことなので、相対パスでなく、絶対パスで指定します。 あるいは、コマンドライン引数で指定したファイルを開くと言うことでしょうね。 ・絶対パス文字列をプログラム中に埋め込みで指定する ⇒ 多い ・相対パス文字列をプログラム中に埋め込みで指定する ⇒ 少ない ・コマンドライン引数や、設定ファイルの記述など、プログラム外部から与えられたファイル名を開く ⇒ 多い > もしくはファイルをカレントディレクトリにもってくるということですね。 ⇒ まずあり得ない
OrangeEX-Juice

2021/01/11 09:03

よく理解できました!ありがとうございます。
guest

0

絶対パスで動いたとのことなので
script.pyソースファイルが同じディレクトリ内に存在していないのではないのでしょうか?
たとえば
デスクトップ
|---script.py
|--- main.py
のようなディレクトリツリー構造になっていればmain.pyでopen('script.py','r')を呼び出したとき同ディレクトリにあるscript.pyを探し当てて参照してくれるとおもいます.

また, Pythonコンソールのようなところで実行している場合も同様で, script.pyのあるディレクトリ内でコンソールを開かないと単にscript.pyというパスを渡しただけでは動いてくれないと思います.

投稿2021/01/11 07:30

編集2021/01/11 07:40
yosse95ai

総合スコア39

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

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

OrangeEX-Juice

2021/01/11 08:35

回答ありがとうございます。ではカレントディレクトリが違ういろんなフォルダのファイルを開きたい場合、その全てのファイルをカレントディレクトリに持ってきてからpythonで開くしかないのでしょうか。
yosse95ai

2021/01/11 11:35 編集

otn様も言っておられる通り, 「ファイル名も知っているので参照したいファイルの場所もしっている」はずなので, 絶対パス指定してあげることなどが多いと思います. なぜなら, そのファイルたちは自分で任意の場所に作成した, もしくは任意の場所にダウンロードしているはずなので. >ではカレントディレクトリが違ういろんなフォルダのファイルを開きたい場合、その全てのファイルをカレントディレクトリに持ってきてからpythonで開くしかないのでしょうか。 に関してですが, そういうこともなく, 例えば`Cドライブ`直下に`script.py`があると仮定します. (あくまで仮定...) ソースのファイルは任意の場所でいいです. (例えば, D:/python/main.py みたいな) ソースファイルにて ```python path="C:\script.py" w=open(path, 'r') ``` とすれば, カレントディレクトリにそのファイルがなくても, パス名を絶対パスなどで指定してあげられれば, 基本的にどこからでも参照できるのではないかとおもいます. pythonコンソールからの実行でも同様のことが言えます. 幸い, 現代のコンソールではファイルをコンソールに`D&D`したとき絶対パスを自動入力してくれたりもします. 長くなりましたが参考になればと思います.
OrangeEX-Juice

2021/01/11 12:38

なるほどです。絶対パスは万能なのですね。しかし深いディレクトリにあるファイルなどのパスだと、どうしてもめんどくさくなってしまいますよね。atomでディレクトリの補完機能もないようですし(もしあったら教えてくださいm(._.)m)そういった場合も我慢して打つしかないですか?
yosse95ai

2021/01/11 13:56 編集

万能と言うと語弊があると思いますが, 相対パスよりは確実です. atomにはあまり明るくないのですが, 外部パッケージをインストールすると, パスの補完を行ってくれるみたいです . https://creating-homepage.com/archives/1690 また, 携わるプロジェクトにもよるとおもいますが, 必要なファイル(例えば画像, テキストやJSON)はそれらを入れる用のフォルダをプロジェクト直下に生成し, 管理されると思います. 例([]はフォルダ名とする): [Project Folder] |---main.py +---[src] | +--icon.jpg | |---[script] . +---script.py すると ```python(main.py) path="./script/script.py" #これは相対パス ``` みたいな感じです. めんどくさくなるほど深いところにファイルがあるならばディレクトリ構造の整理を行ったほうがよろしいかと思います. プロジェクト開始前(実装前)にディレクトリ構造を意識しておいた方がいいかと思います. もしくはmainの実行コードに引数をとれるように実装し, PythonプロジェクトをPyinstaller等で実行ファイル(EXE)化した後であれば, atomの環境に寄らず, 引数としてファイルの絶対パスを受け取れると思います. 以下二つを合わせる感じです. https://qiita.com/taashi/items/07bf75201a074e208ae5 https://techacademy.jp/magazine/18963 単にプログラミングの練習のためのデバッグでそのファイルを使いまわすといった場合, カレントディレクトリにおいてしまうか, 変数に絶対パスを入れ込んでしまうのが無難かと思います.
退会済みユーザー

退会済みユーザー

2021/01/11 14:45 編集

exe化は飛躍しすぎかと。 atomやエクスプローラなどには絶対パスをコピーする機能があるのでそれ使えば簡単に絶対パスを張り付けることができます。 因みにOrangeEX-Juiceさんはなぜatomを使っているんでしょうか。 特に理由がないのであればVSCodeやPycharmなどほかのエディタに移りましょう。 atomはとある事件(買収)をきっかけに徐々に衰退しています。
yosse95ai

2021/01/12 02:28 編集

@yakitorii様 確かに飛躍しすぎました. ご指摘ありがとうございます. @OrangeEX-Juice様 yakitorii様がおっしゃる通りで, 何か特別な理由がないのであればVSCode等に切り替えられることを強くお勧めします. ここまで来て, 本来の質問であった >----------------------------------------------------------------------------------------- pythonのopen関数でファイルを下のようにすると[ファイルがありません]とエラーになります。 w=open('script.py','r') script.pyはDesktopの下にあります。絶対パスで実行したところしっかりファイルを開けたので、おそらくターミナルのように自分のいる位置関係しっかりしないとダメなのだろうと考えましたが、ネットや教材ではファイル名単体で開けていました。なぜでしょうか。pythonでも何か方法を使って移動しないといけないのですか? 環境はmacでatomを使っています。 --------------------------------------------------------------------------------------- の本質的な部分からだいぶ離れてしまっています. 現在, 本来の質問の本質は解決したのではないでしょうか? 以上の理由で, 議論を終了させていただきます.
OrangeEX-Juice

2021/01/12 11:19

お二人ともありがとうざいました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問