0

Automater ワークフローをコピーしようとしています。それらを構成ファイルにリストしました。構成ファイルをループしてディレクトリをコピーしたいと思います。名前にスペースがあり、困っています。

ファイル名などを正しく出力しますが、コピーの名前の周りに余分な「」があるように見えるため、コピーは失敗します

import os
import shutil

confdir=os.getenv("my_config")
dropbox=os.getenv("dropbox")
conffile = ('services.conf')
conffilename=os.path.join(confdir, conffile)    
sourcedir= (r'~/Library/Services/')
destdir=os.path.join(dropbox, "My_backups")

for file_name in open(conffilename):
    sourcefile=os.path.join(sourcedir, repr(file_name.strip()))
    print sourcefile
    destfile=os.path.join(destdir, file_name.strip())
    shutil.copytree(sourcefile, destfile)

そして、エラーは

~/Library/Services/'Add PDF Metadata.workflow'
Traceback (most recent call last):
  File "Untitled 3.py", line 15, in <module>
    shutil.copytree(sourcefile, destfile)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py",     line 168, in copytree
    names = os.listdir(src)
OSError: [Errno 2] No such file or directory: "~/Library/Services/'Add PDF Metadata.workflow'"

前もって感謝します

以下の提案を試しましたが、まだ機能していません

4

3 に答える 3

1

repr()を使用している理由は何file_name.strip()ですか? これにより、ファイル名が一重引用符で囲まれますが、それらはファイル パスには存在しません。を削除するrepr()と、動作するはずです。

于 2012-10-06T21:47:19.390 に答える
0

~ が気に入らなかったので、完全なパスを入力しました。また、もう 1 つ編集し、sourcedir=os.path.expanduser('~/Library/Services/') を使用してホーム ディレクトリを展開しました。

于 2012-10-24T19:12:01.270 に答える
0

shutil.copytree(src, dst)srcにあるディレクトリ ツリー (およびその中のすべてのファイル)を の新しいディレクトリ ツリーに再帰的にコピーしますdst。ファイルで使用するためのものではありません。

ここでは、完全なディレクトリ ツリーではなく、単一のファイルをコピーしたいので、shutil.copyまたはを使用する必要がありますshutil.copy2

再現したいディレクトリ ツリーにファイルが配置されている可能性がある場合は、 を 呼び出す前にからos.makedirs返されたパスを使用して、実際にファイルを にコピーできます。os.path.dirname(destfile)shutil.copy(sourcefile)destfile

os.makedirsただし、既に存在する宛先で呼び出すとエラーが発生することに注意して くださいtry / except

于 2012-10-06T21:59:51.137 に答える