NokkunBlog

Keep technology simple.

Pythonでファイルをコピー、移動、削除する方法

 

こんにちは。のっくん(@yamagablog)です。

 

この記事では、Pythonでファイルを操作(移動、コピー、削除)する方法をご紹介します。

 

「大量のファイルを移動させたい、コピーさせたい」

 

そんな時はPythonで書くのがオススメですよ。

 

 

ファイルのコピー、移動

 

shutil(shell utilities)はファイル操作用のモジュールです。ファイルをdeliciousディレクトリにコピー、移動させてみます。

 

ファイルのコピー

import shutil
shutil.copy('/home/matsu/meat.txt','/home/matsu/delicious')

 

ファイルの移動

import shutil
shutil.move('/home/matsu/try.txt','/home/matsu/delicious')

 

ファイルをゴミ箱に移動する

 

ハードディスクから削除するのではなく、ゴミ箱に移動させるコードを書いてみましょう。

 

send2trashというモジュールを使います。

 

import send2trash

#ファイルを作成する
with open('bacon.txt','a') as bacon_file:
    bacon_file.write('Bacon is not Vegetable.')

#ファイルをゴミ箱に移動する
send2trash.send2trash('bacon.txt')

 

openの時に指定しているa(append)は追記するという意味ですが、ファイルが存在しなければ新規に作ってくれます。

 

Tips
Ubuntuのゴミ箱は、「$HOME/.local/share/Trash」にあります。bacon.txtはその中のfilesというフォルダに移動しているはずです。

 

ディレクトリツリーを表示する

 

ディレクトリを指定して、その中に入っているサブフォルダやファイルを全て表示させたい時があります。

 

普通はこのプログラムを書くのは大変ですが、pythonだと簡単に実行できます。

 

まずは、Ubuntuで適当なフォルダdeliciousを作ります。その下にフォルダとファイルを適当に作成して以下のような構成にしました。

 

matsu@nuc5i5ryh:~/delicious$ tree
.
├── cats
│   └── catnames.txt
├── dogs
│   └── dognames.txt
└── spam.txt

 

Tips

treeコマンドは「sudo apt install tree」でインストールできます。

Ubuntu18.04で「Unable to locate package」エラーが出る場合は、下のようにuniverseレポジトリを追加してから実行しましょう。

matsu@nuc5i5ryh:~/delicious$ cat /etc/apt/sources.list
deb http://archive.ubuntu.com/ubuntu bionic main universe
deb http://archive.ubuntu.com/ubuntu bionic-security main universe
deb http://archive.ubuntu.com/ubuntu bionic-updates main universe

matsu@nuc5i5ryh:~/delicious$ sudo apt update

 

それではPythonでコードを書いてみます。

 

import os

for foldername,subfolders,filenames in os.walk('/home/matsu/delicious'):
    
    print('現在のディレクトリは「{}」です'.format(foldername))
    
    for subfolder in subfolders:
        print('サブフォルダは「{}」です'.format(subfolder))
    
    for filename in filenames:
        print('ファイル名は「{}」です'.format(filename))
        
    print('')

 

実行すると以下の通りに出力されます。

 

現在のディレクトリは「/home/matsu/delicious」です
サブフォルダは「cats」です
サブフォルダは「dogs」です
ファイル名は「spam.txt」です

現在のディレクトリは「/home/matsu/delicious/cats」です
ファイル名は「catnames.txt」です

現在のディレクトリは「/home/matsu/delicious/dogs」です
ファイル名は「dognames.txt」です

 

まとめ

 

記事のまとめ
・shutilモジュールを使うと、ファイルのコピーや移動ができる
・send2trashモジュールを使うと、ゴミ箱に移動ができる
・os.walk()関数を使うと、ディレクトリの中身を全て表示できる

 

参考