2011-06-20 12 views
0

関数への相対パスを渡す正しい方法は、次の関数宣言が正しいかどうか教えてください。呼び出しは1つの変数を取るだけです。 2番目の変数(絶対パス)を含めると、私の関数は動作しません。関数内での相対パスの受け渡し

def extract(tar_url, extract_path='.'): 

動作しないコール:

extract(chosen, path) 

これは動作しますが、抽出しない:

extract(chosen) 

全コード:

def do_fileExtract(self, line): 
    defaultFolder = "Extracted" 
    if not defaultFolder.endswith(':') and not os.path.exists('c:\\Extracted'): 
     os.mkdir('c:\\Extracted') 
     raw_input("PLACE .tgz FILES in c:\Extracted AT THIS TIME!!! PRESS ENTER WHEN FINISHED!") 
    else: 
     pass 

    def extract(tar_url, extract_path='.'): 
     print tar_url 
     tar = tarfile.open(tar_url, 'r') 
     for item in tar: 
      tar.extract(item, extract_path) 
      if item.name.find(".tgz") != -1 or item.name.find(".tar") != -1: 
      extract(item.name, "./" + item.name[:item.name.rfind('/')]) 


    userpath = "Extracted" 
    directory = os.path.join("c:\\", userpath) 
    os.chdir(directory) 
    path=os.getcwd() #Set log path here 
    dirlist=os.listdir(path) 


    files = [fname for fname in os.listdir(path) 
        if fname.endswith(('.tgz','.tar'))] 

    for item in enumerate(files): 
     print "%d- %s" % item 

    try: 
     idx = int(raw_input("\nEnter the file's number:\n")) 
    except ValueError: 
     print "You fail at typing numbers." 

    try: 
     chosen = files[idx] 
    except IndexError: 
     print "Try a number in range next time." 


    newDir = raw_input('\nEnter a name to create a folder a the c: root directory:\n') 
    selectDir = os.path.join("c:\\", newDir) 
    path=os.path.abspath(selectDir) 

    if not newDir.endswith(':') and not os.path.exists(selectDir): 
     os.mkdir(selectDir) 


    try: 

     extract(chosen, path) 
     print 'Done' 
    except: 
     name = os.path.basename(sys.argv[0]) 
     print chosen 
+0

質問に関連するコードがないので、私は推測します。 'extract()'はクラスのメソッドであり、 'self'パラメータを忘れてしまいました。 –

+0

いいですね。それがうまくいかないと言ったら何を意味しますか?エラーを出力しますか? – Evgeny

+0

@Sven Marnach - それは必須ですか? @Evgeny - エラーを出力しません.2番目の変数を呼び出しに追加しないで、抽出しますが、2番目の変数(パス)を追加すると、フォルダが作成されます(抽出しません)。 – suffa

答えて

1

それはあなたのように見えるにのエスケープ文字を見逃しました raw_inputはプロンプト文字列を生の文字列、ユーザ入力だけとみなしません。 これはプログラムの機能には影響しません。

あなたはUnixまたはWindows上にいますか?私は印象に残っていたのですが、UNIX上では\\の代わりに/のスラッシュをセパレータとして使用していました。

私は、このファイルにはいくつかのコードをテストした: http://simkin.asu.edu/geowall/mars/merpano0.tar.gz

次のコード:

>>> from os import chdir 
>>> import tarfile 
>>> chdir(r'C:\Users\Acer\Downloads') 
>>> tar_url = 'merpano0.tar.gz' 
>>> print tar_url 
merpano0.tar.gz 
>>> tar = tarfile.open(tar_url, 'r') 
>>> extract_path = 'C:\\Users\\Acer\\Downloads\\test\\' 
>>> for item in tar: 
    tar.extract(item, extract_path) 

が私の最後に問題なくきれいに実行します。 testディレクトリには、オリジナルのtarファイルとまったく同じいくつかのファイルを含む単一のフォルダがあります。あなたのコード内であなたが何をしているのかを説明できますか?

+0

Windowsマシン – suffa

+0

@user:これが正解であったのはどういうことか分かりませんが、何かがあればあなた自身でそれを理解することができてうれしいです。 –

関連する問題