2012-05-02 4 views
1

私はPythonで初心者ですし、既存のPythonスクリプトを修正する必要があります。Pythonのshutilを使ってアンパサンド '&'を含むファイルをパスにコピーするには?

を言う私は、Windowsのエラーポップアップ取得この場合

dst = "Y:\R&D\myfile.txt"

:以下のような他のパスにスクリプトをコピーしたファイルは:dst&のような文字が含まれていない限り、

err=shutil.copyfile(src, dst)

これは動作します

Open file or Read file error 
Y:\R 

私は逃げようとしました&にバックスラッシュ、二重バックスラッシュを使用し、文字列を追加引用符で囲みます:dst = "\"Y:\R&D\myfile.txt\""。 最後のケースで何も動作しません。shutilから「無効なパス」というエラーメッセージが表示されます。

どうすればこの問題を解決できますか?

+0

最初に別のディレクトリに名前を変更します。そして、あなたは将来さらに多くの問題を避けるでしょう。 – eumiro

+0

@ umiro、アドバイスありがとう。しかし、これは解決策ではありません。これは回避策です。私は 'R&D'と呼ばれるディレクトリにファイルをコピーする必要があります – AlexR

+2

完全なスタックトレースを含め、PythonとOSのバージョンを記述してください。 – NPE

答えて

2

ほとんどのプラットフォームでは、アンパサンドがサポートされているとは思えません。 Windows固有のプログラムを呼び出す必要があります。私はrobocopyを提案しています。それはWindowsのバージョンには含まれていない場合、あなたは私が(srcdst文字列の両方で)/にファイルパス内のすべての\を変更した場合、それは私の作品2003

+0

ありがとうございます(+1)。しかし、私はまだ明確な解決策を探しています。 – AlexR

0

のためのWindowsサーバの管理者ツールキットでそれを見つけることができます。はい、私はあなたがWindowsを使用していることを知っていますが、ファイルパスは、Windowsでも、/を使用すると、Pythonではそれほど難解ではないようです。

また、ネットワークドライブにコピーしているようです。同じ問題がc:\R&D\にコピーされますか?

どのようなWindowsのフレーバーを使用していますか? shutil.copyfile()\の代わりに/を使用している限り、ディレクトリ名、srcパスとdstパス、XPのローカルドライブとネットワークドライブの両方で&と表示されます。

+0

ありがとう、@アラーン。私は質問を書くときに間違いを犯した。本当に私は '\\'と '/'の両方を試しました。私の問題はスラッシュではありませんがアンパサンド – AlexR

+0

アンパサンドを使ってディレクトリにファイルをコピーするのに問題はないので、奇妙です。あなたの 'Y:'ドライブはどこにマップされていますか?それが問題なのだろうかと思います。あなたは 'C:'に同じ問題をコピーしていますか? – alan

0

は「\ \」と「\」をエスケープしてみてください、このコマンドは、(例えば)に動作する必要があります。

shutil.copyfile("Y:\\R&D\\myfile.txt", "C:\\TMP") 
0

最も簡単な解決策は、文字列はそれを逃れるために、生とではないことのpythonに意味やどのような方法でそれを変更します。ここでは

import shutil 

src = r"c:\r&d\file.txt" 
dst = r"c:\r&d\file2.txt" 

err=shutil.copyfile(src, dst) 
0

は、それがWindows上で動作させるためにいくつかの方法があります。

  • アプローチ1:(既に説明)SRC/DEST限り

    import shutil; shutil.copy(src,dest)

    r'c:\r&d\file'文字列形式を使用しています。また、前方の "/"スラッシュでも機能します。

  • アプローチ2:ウィンドウに一重引用符ではなく二重引用符を使用することに注意してください。

    src = r'c:\r & d\src_file'

    os.system('copy "{}" "{}"'.format(src,dest)) 1 file(s) copied

  • 最終リゾート:

    with open(dest, 'wb') as f: f.write(open(src,'rb').read())

os.systemとは異なり、この好ましい実装subprocess.callは、ウィンドウでの引用方法では機能しませんでした。私はいつも得ますThe specified path is invalid. Unixで試してみませんでした。

関連する問題