質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

3195閲覧

python 複数フォルダのコピー

tt2020

総合スコア4

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/08/18 04:01

編集2019/08/18 06:49

###pythonで複数フォルダのコピー

pythonでフォルダをコピーするプログラムを書いています。
複数フォルダのコピーをしたいのですが、どうしてもエラーになります。

Aフォルダにあり、Bフォルダにないものをコピーするプログラムを作りたく、
例えば、Aフォルダの中のa,b,c,d,eの5つのフォルダがあり、
Bフォルダの中にc,dの二つがあった場合、Aフォルダのa,b,eの3つをBフォルダにコピーして、Bフォルダの中身をAフォルダと同じにしたいです。

以下のエラーメッセージが発生しました。

mkdir(name,mode)

該当のソースコード

import os,glob,shutil,os.path pathA = r'C:...\A*' pathB = r'C:...\B*' nameA = glob.glob(pathA) nameB = glob.glob(pathB) for i in nameA: if not (os.path.exists(pathB)): shutil.copytree(i,pathB)

for文の中身を、フォルダBの中にi が存在しない時、iをAからBにコピーしてくる。というようにしたいのですが、どのように書けば良いでしょうか?
よろしくお願い致します。

試したこと

for文の中をいろいろ変えてみたりしましたがダメでした。

補足情報(FW/ツールのバージョンなど)

python3.7を使っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2019/08/18 04:07

エラーメッセージ全文とエラーが出たコード全文を載せてください。
meg_

2019/08/18 04:10

質問タイトルは「複数フォルダのコピー」ですが、本文には「複数ファイルのコピーをしたい」とあります。 実現したいのはどちらですか? 必要であればタイトルの修正をお願いいたします。
tt2020

2019/08/18 06:37

回答ありがとうございます。 実現したいのはフォルダのコピーです。aフォルダの中に色々ファイルが入っており、フォルダごとコピーしたいです。打ち間違え申し訳ありません。 エラーはpyscripterを使っており、上のプログラムを実行すると、「os.py」というモジュールが出てきます。そこで「mkdir(name,mode)」が赤くなっており、カーソルを合わせると、 「function Parameter mode of function makedirs Defined in module os(196) Type:int」と出てきます。
meg_

2019/08/18 06:46

「import os,glob,shutil,os path」で既にエラーが出るのですが、タイプミスでしょうか?ご確認お願いします。
tt2020

2019/08/18 06:49

何度も申し訳ございません。 os pathでなくos.pathでした。
guest

回答2

0

ベストアンサー

Python

1import os,glob,shutil 2 3pathA = r'C:\Users\A*' 4pathB = r'C:\Users\B*' 5nameA = glob.glob(pathA) 6nameB = glob.glob(pathB) 7 8nameAlist = [os.path.basename(i) for i in nameA] 9nameBlist = [os.path.basename(i) for i in nameB] 10 11for i, j in enumerate(nameAlist): 12 if os.path.isfile(nameA[i]) and not j in nameBlist: #ファイルかどうかのチェックを追加 13 shutil.copy(nameA[i], os.path.dirname(pathB))

投稿2019/08/18 07:12

編集2019/08/18 10:11
meg_

総合スコア10580

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tt2020

2019/08/18 07:59

ありがとうございます。 何度も申し訳ないのですが、実行してみたところ、 shutil.pyのモジュールが出て、 with open(src,'rb') as fsrc のところが赤くなったのですが、これはどこが間違っているのでしょうか。 最後の行のshutil.copy~をコメントアウトして実行すると、nameA[i]などは問題なく表示されました。
meg_

2019/08/18 08:38

最後の行は、「nameA[i]」のファイルを「pathB」のフォルダへコピーしています。 nameA[i]とos.path.dirname(pathB)をデバック(print()で出力)すると、どんな値になっていますか?
tt2020

2019/08/18 09:20

nameA[i]とos.path.dirname(pathB)は C:...\A\a C:...\B C:...\A\b C:...\B C:...\A\e C:...\B と出力されています。
tt2020

2019/08/18 10:00

copyの所をcopytreeに変えて実行してみたのですが、 os.pyのモジュールが出て、 mkdir(name,mode)が赤くなっており、ダメでした。
meg_

2019/08/18 10:02

a、b、eはファイルですか? もしかしてファイル以外にフォルダも含まれていますか?
meg_

2019/08/18 10:07

「shutil.copytree」はフォルダをコピーしますが、コピー先のフォルダが既に存在する場合はエラーになります。詳細はドキュメントを参照ください。
tt2020

2019/08/18 10:22

a~eをファイルにして実行するとコピーできました。 ありがとうございます。 a~eがフォルダの場合はこのプログラムでは実行できないのでしょうか?
meg_

2019/08/18 10:27

ファイルのみコピーするプログラムをアップしましたのでご確認ください。 フォルダもコピーしたい場合は、ご自分でその部分を実装されることをお勧めしますが、もしどうしても無理ならご相談ください。
tt2020

2019/08/18 11:29

ありがとうございます。 フォルダのコピーはしばらく考えてみます。 丁寧に教えて頂き本当にありがとうございました。大変助かりました。
guest

0

python

1for i in nameA: 2 if not (os.path.isfile(pathB + i)): 3 shutil.copy(i,pathB)

こうだと思います。

投稿2019/08/18 05:50

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tt2020

2019/08/18 06:53

回答ありがとうございます。 そのコードで試してみたのですが、ifのところでエラーが出て、 TypeError:can only concatenate str(not "int") to str とメッセージが出ます。どう修正すれば良いでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問