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

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

新規登録して質問してみよう
ただいま回答率
85.49%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

Python

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

Q&A

解決済

3回答

461閲覧

ファイル名取得後にフォルダに移動したい

SILASSETH

総合スコア7

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

Python

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

0グッド

0クリップ

投稿2019/08/27 05:32

あるフォルダ内に
A_B_C_D_E_.X
(それぞれのアルファベットは文字数様々です)
というファイルが沢山あるのですが、
これをフォルダ内にBというフォルダを作り、それぞれの該当するBのフォルダに移動するコードを作成したいのですが、どのようにすればよいでしょうか。

pythonの環境はすでにあるので、pythonでお願いしたいです。
DOSならそこそこ読めるので、DOSでも良いです。

よろしくお願い致します。

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

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

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

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

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

tiitoi

2019/08/27 05:39 編集

「A_B_C_D_E_~略~.X」というファイル名でなぜBのフォルダに移動するのでしょうか。 ファイル名を元にしてファイルを割り振る規則を追記していただけますか。
SILASSETH

2019/08/27 05:55 編集

Aが型番、Bが名前になっているので、Bごとにフォルダを分けて、そこに該当するBをそのBの名前のフォルダに移動したいという意味です。 JX002-ネジ16-~~~ JZ002-ネジ16-~~~ STT32334-トルクa-~~~ STT32335-トルクb-~~~ ならば、 ネジ16 トルクa トルクb のフォルダにそれぞれ移動して欲しいという意味です。
guest

回答3

0

以下の感じでしょうか?

python

1import os 2import glob 3import shutil 4 5p = 'D:\work\20190827\208506' 6 7def get_dir_name(file_name): 8 return file_name.split('_')[1] 9 10for path in glob.glob('{}/*'.format(p)): 11 file_name = os.path.basename(path) 12 dir_name = get_dir_name(file_name) 13 dir_path = os.path.join(p, dir_name) 14 if not os.path.exists(dir_path): 15 os.mkdir(dir_path) 16 shutil.move(path, dir_path)

A_B_C_D_E_.X

JX002-ネジ16-~~~

ファイル名(フォルダ名)ですが、質問本文では「」区切り、質問内では「-」区切りと異なっておりました。↑のコードでは「」区切りとしています。「-」区切りであれば関数内を編集してください。

投稿2019/08/27 06:15

編集2019/08/27 06:18
yamap55

総合スコア1376

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

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

SILASSETH

2019/08/27 06:42

ありがとうございます。無事処理できました。助かりました。
guest

0

pathlibを使った例です。

Python

1import pathlib 2 3for p in pathlib.Path('sub_dir').glob('*.txt'): 4 l = p.name.split('-') # a-b-c -> [a,b,c] 5 if len(l) > 1: 6 dst_dir = p.parent.joinpath(l[1]) # b 7 dst_dir.mkdir(exist_ok=True) # フォルダ作成 8 p.rename(dst_dir.joinpath(p.name)) # 移動

投稿2019/08/27 06:39

can110

総合スコア38256

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

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

0

ベストアンサー

回答

  • ファイル名 <型番>-<名前>-<文字列> から <名前> の部分を抽出する。

split("-") でファイル名を分割して2番目の部分文字列取り出す。

  • ディレクトリの走査、ファイルパスの操作

→ pathlib を使う。

  • ファイルのコピー

→ shutil.copyfile を使う。

コード

python

1import shutil 2from pathlib import Path 3 4input_dir = Path("input") # 入力ディレクトリ 5output_dir = Path("output") # 出力ディレクトリ 6 7for path in input_dir.iterdir(): 8 # <型番>-<名前>-<文字列> から <名前> の部分を抽出する。 9 # 例: STT32335-トルクb-XXX -> トルクb 10 name = path.name.split("-")[1] 11 12 # サブディレクトリを作成する。 13 output_subdir = output_dir / name 14 output_subdir.mkdir(parents=True, exist_ok=True) 15 16 # コピー先のファイルパス 17 output_path = output_subdir / path.name 18 print(f"{path} -> {output_path}") 19 20 # ファイルをコピーする。 21 shutil.copyfile(path, output_path)

入力

input ├── JX002-ネジ16-XXX ├── JZ002-ネジ16-XXX ├── STT32334-トルクa-XXX └── STT32335-トルクb-XXX

出力

output ├── トルクa │ └── STT32334-トルクa-XXX ├── トルクb │ └── STT32335-トルクb-XXX └── ネジ16 ├── JX002-ネジ16-XXX └── JZ002-ネジ16-XXX

参考文献

投稿2019/08/27 06:15

編集2019/08/27 06:18
tiitoi

総合スコア21956

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

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

SILASSETH

2019/08/27 06:42

ありがとうございます。無事処理できました。助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問