1

私は Python の初心者で、既存の Python スクリプトを変更する必要があります。スクリプトは、次のようにファイルを他のパスにコピーします。

err=shutil.copyfile(src, dst)

dst次のような文字が含まれていない限り、これは機能し&ます。

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

この場合、次のようなWindowsエラーポップアップが表示されます

Open file or Read file error
Y:\R

バックスラッシュ、ダブルバックスラッシュを使用して & をエスケープし、文字列を追加の引用符で囲みました: dst = "\"Y:\R&D\myfile.txt\"". から「無効なパス」エラーメッセージが表示される最後のケースでは何も機能しませんshutil

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

4

5 に答える 5

2

アンパサンドがほとんどのプラットフォームでサポートされているとは思えません。おそらく、Windows 固有のプログラムを呼び出す必要があります。ファイルのコピーが得意なので、robocopy をお勧めします。Windows のバージョンに含まれていない場合は、2003 用の Windows サーバー管理者ツールキットで見つけることができます。

于 2012-05-02T13:36:11.333 に答える
0

「\」を「\ \」でエスケープしてみてください。このコマンドは機能するはずです (例):

 shutil.copyfile("Y:\\R&D\\myfile.txt", "C:\\TMP")
于 2012-05-02T14:18:04.063 に答える
0

最も簡単な解決策は、文字列が生であり、エスケープしたり変更したりしないことを Python に通知することです。

import shutil

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

err=shutil.copyfile(src, dst)
于 2012-05-02T15:21:23.877 に答える
0

\ファイルパス内のすべてを(と文字列/の両方で)に変更すると、うまくいきます。はい、あなたが Windows を使用していることは知っていますが、ファイルパスは、Windows でも .srcdst/

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

どのフレーバーの Windows を使用していますか? XPのローカルドライブとネットワークドライブの両方で、ディレクトリ名、srcパスとdstパスの両方で問題なく動作しshutil.copyfile()ます- .&/\

于 2012-05-02T14:04:58.270 に答える
0

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

  • アプローチ1:(すでに説明済み)

    import shutil; shutil.copy(src,dest)

    r'c:\r&d\file'src/dest が文字列形式を使用している限り。また、スラッシュ「/」でも機能します。

  • アプローチ 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は、Windows での引用アプローチでは機能しませんでした。私はいつもThe specified path is invalid.unixで試していませんでした。

于 2017-06-15T13:29:58.350 に答える