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

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

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

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Python

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

Q&A

解決済

1回答

3670閲覧

ファイルの検索,移動

cho

総合スコア23

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Python

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

1グッド

2クリップ

投稿2015/09/17 11:54

ファイルの検索,移動を行いたいと考えています.
欲しいファイル名を記述したテキストファイルがあります.

#sample.txt 100.txt 102.txt 110.txt 200.txt 209.txt ・ ・ ・

探したいファイルは同じディレクトリにあるわけではなく,
いくつかに分岐しています.

親フォルダ ― 子フォルダ ― 孫フォルダ ~.txt ― 孫フォルダ ~.txt ― 孫フォルダ ~.txt ― 子フォルダ ― 孫フォルダ ~.txt ・ ・ ・

フォルダ内のファイルは検索したいもの以外も存在します.
ディレクトリの階層はすべて一定です(3階層のみ).

このような状態の時,sample.txtにあるファイル名を検索し,
hogeフォルダに移動することは可能でしょうか.

#python3.4
#windows

※ご回答いただいた内容に質問させていただくこともあるかと思いますので,
※よろしければご返信いただければと思います.

yoyoyo0205👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

python

1import os 2import glob 3import shutil 4 5target = 'dir' + os.sep 6for line in open('sample.txt', 'r'): 7 line = line.strip() 8 files = glob.glob('*' + os.sep + line) 9 if len(files) == 1: 10 print files[0] 11 shutil.move(files[0], target)

こんな感じでしょうか.
globはファイルの探索にワイルドカードが使えるのでこのような場合には楽で良いと思います.
ただし複数ファイルが見つかることもあるため,1つだけ見つかった場合のみ移動しています.
移動先のフォルダを表すtargetは適宜変更してください.

投稿2015/09/20 08:34

KenTerada

総合スコア751

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

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

cho

2015/10/07 04:00

ご回答ありがとうございます. 申し訳ありませんが,何点か質問させていただけないでしょうか.
cho

2015/10/08 04:05

ありがとうございます。 単一ディレクトリを指定して(作業ディレクトリ)、そこからtargetへの移動はできたのですが、質問で示したようにフォルダ分岐が大量にある場合、その全てのフォルダ内を探索することはできないのでしょうか。
KenTerada

2015/10/08 09:26

そうでしたね.glob.glob('*¥¥*¥¥' + line)のようにして1つ階層を追加してください.globの*は,直前の文字が0回以上あるパターン,という正規表現っぽいものではなく,それ単体で任意のフォルダやファイルに相当します.os.systemなどを使ってWindowsのコマンドでやる方法もあると思います.
cho

2015/10/09 08:12

ありがとうございます。 もう一点、if len(files) == 1:この部分はどういった目的での処理なのでしょうか. 教えていただければ幸いです。
KenTerada

2015/10/09 08:41 編集

globで同名の複数ファイルが見つかってしまうと,ターゲットフォルダに移動した時に上書きしてしまう可能性があるためです.そんなことが決して起こらないならば,チェックをする必要はありません.
cho

2015/10/09 08:56

そのためのものでしたか・・ 無事,実行することができました. お付き合いいただき誠にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問