質問: "ファイル名称2": df.to_csv("filepath[i]", sep=",") else df.loc[1,"name"]: df.to_csv("desktop/Nan/filepath[i]", sep=",") ``` よろしくお願いいたします。
回答: 他の方の回答で答えは出ていますが。 > > 最初に、フォルダに入っている計1000個のテキストファイルを車両の名称ごとに分類し、別々のフォルダに保存したいです。 > > > やりたいことはファイルのコピーですか?それともファイルの移動ですか? 質問文に記載しているコードは`df.to_csv`なためファイルのコピーを行いますが。 以下はディレクトリを作成してファイルを移動するサンプルです。 ``` # -*- coding: utf8 -*- import glob import os import pandas as pd from pathlib import Path import shutil def move_files(base_dir: Path, file_path: list) ->None: for f in file_path: src = Path(f) # ※3 df = pd.read_table(f, sep=",", engine='python') # ※4 dst_dir = Path(base_dir, df.loc[1, "name"]) dst_dir.mkdir(parents=True, exist_ok=True) dst = dst_dir.joinpath(src.name) # ファイルのメタデータを保持しつつコピー # shutil.copy2(str(src), str(dst)) # ファイルを移動 os.replace(str(src), str(dst)) def main() -> None: base_dir = Path("share_folder") # ※1 file_path = glob.glob(str(base_dir.joinpath("*.txt"))) # ※2 ファイル一覧をソート! # file_path = sorted(file_path) move_files(base_dir, file_path) if __name__ == '__main__': main() ``` ■質問文のスクリプトで怪しい点。 1,`os.chdir`でカレントディレクトリを移動するとスクリプトが終了するまで対象のディレクトリに対して共有ロックを行うため避けたほうが良いです。 ``` os.chdir("share_folder/") ``` `glob.glob`の引数にパスと検索パターンを指定するとそのフォルダ直下を検索してくれます。 ``` glob.glob("share_folder/*.txt") ``` 2,`glob`の結果をソートしていないため、ファイルの処理順は保証されませんが、保証しなくても大丈夫ですか?`glob`結果に対してソートを行うと処理順が保証されます。 3,質問文にサンプルデータが提示されていないので、以下は推測になってしまいますが、 「車両名称」とのことなので、日本語だと思いますが。`pandas#read_table`は環境によっては日本語ファイル名を許容しません。 日本語ファイル名の読み込みを行いたい時は`pd.read_table`の引数に`engine='python'` を追加してくださいな。 4,`df.loc[1, "name"]`の場合`df.loc`は0オリジンで始まってるので、2行目(ヘッダーを含むと3行目)を読み込みますが車両名称の位置は認識相違ないでしょうか?