web-dev-qa-db-ja.com

ディレクトリパスをユーザー入力として取得する適切な方法は何ですか?

以下は、ユーザーからの「生の入力」としてディレクトリパスを取得するために使用しようとしているコードのスニペットです。ユーザーから入力が取得された後、次のエラーが表示されます。

Traceback (most recent call last):
  File "C:\Users\larece.johnson\Desktop\Python Programs\Hello World 2", line 14, in <module>
    f = open(str,"r+")                                     #I open the text file here which the user gave me
IOError: [Errno 2] No such file or directory: 'C:/Users/larece.johnson/Desktop/Python Programs/BostonLog.log.2014-04-01'

以下で行ったことを無視して、Pythonが受け入れるように、ユーザーからパスを取得することになっている特定の方法がありますか?

たとえば、探しているディレクトリとファイルは

C:/Users/larece.johnson/Desktop/Python Programs/BostonLog.log.2014-04-01
import re     #this library is used so that I can use the "search" function
import os     #this is needed for using directory paths and manipulating them 

str =""       #initializing string variable for raw data input

#print os.getcwd()
#f = open("C:/Users/larece.johnson/Desktop/BostonLog.log.2014-04-02.log","r+")

str = raw_input("Enter the name of your text file - please use / backslash when typing in directory path: ");  #User will enter the name of text file for me

f = open(str,"r+")
11
mrokeowo

次のようなことを試してみるべきだと思います。

import sys
import os

user_input = raw_input("Enter the path of your file: ")

assert os.path.exists(user_input), "I did not find the file at, "+str(user_input)
f = open(user_input,'r+')
print("Hooray we found your file!")
#stuff you do with the file goes here
f.close()
12
tipanverella

ディレクトリが存在するかどうかを確認したいようです。

その場合、 os.path.isdir を参照してください。

os.path.isdir(path)
    Return True if path is an existing directory.
    This follows symbolic links, so both islink()
    and isdir() can be true for the same path.

このようにすることができます:

s = raw_input();
if os.path.isdir(s):
    f = open(s, "r+")
else:
    print "Directory not exists."
5
Kei Minagawa

私はそれを理解しました...私はディレクトリパスのファイル名の最後にファイル拡張子を追加するのを忘れました。ファイルの名前をコピー/貼り付けするだけで切り捨てられていることに気付きませんでした。..プログラムは動作します...ありがとうございました!

2
mrokeowo