Pythonã®shutil
ã¢ã¸ã¥ã¼ã«ã使ã£ããã¡ã¤ã«ã¨ãã£ã¬ã¯ããªæä½ã®åºæ¬
Pythonã§ãã¡ã¤ã«ããã£ã¬ã¯ããªã®æä½ãè¡ãéãos
ã¢ã¸ã¥ã¼ã«ã«å ãã¦ä¾¿å©ãªã®ãshutil
ã¢ã¸ã¥ã¼ã«ã§ãã
shutil
ã¯ããã¡ã¤ã«ããã£ã¬ã¯ããªã®ã³ãã¼ã移åãåé¤ãã¢ã¼ã«ã¤ãåãªã©ãããé«ã¬ãã«ãªæä½ãç°¡åã«è¡ãããã®æ¨æºã¢ã¸ã¥ã¼ã«ã§ãã
ãã®è¨äºã§ã¯ãshutil
ã¢ã¸ã¥ã¼ã«ã®åºæ¬çãªä½¿ãæ¹ããå
·ä½çãªã¦ã¼ã¹ã±ã¼ã¹ã«ã¤ãã¦è§£èª¬ãã¾ãã
shutil
ã¢ã¸ã¥ã¼ã«ã¨ã¯ï¼
shutil
ã¢ã¸ã¥ã¼ã«ã¯ããã¡ã¤ã«ããã£ã¬ã¯ããªã®æä½ãå¹çåããããã®æ©è½ãæä¾ãã¾ãã
os
ã¢ã¸ã¥ã¼ã«ãä½ã¬ãã«ãªã·ã¹ãã æä½ã«ç¦ç¹ãå½ã¦ã¦ããã®ã«å¯¾ããshutil
ã¢ã¸ã¥ã¼ã«ã¯é«ã¬ãã«ãªæä½ã«é©ãã¦ãã¾ãã
ä¾ãã°ã以ä¸ã®ãããªã¿ã¹ã¯ãç°¡åã«å®ç¾ã§ãã¾ãã
- ãã¡ã¤ã«ããã£ã¬ã¯ããªã®ã³ãã¼
- ãã¡ã¤ã«ããã£ã¬ã¯ããªã®ç§»å
- ãã£ã¬ã¯ããªå ¨ä½ã®åé¤
- ãã£ã¹ã¯å®¹éã®åå¾
- ã¢ã¼ã«ã¤ãï¼zipãtarï¼æä½
åºæ¬çãªä½¿ãæ¹
ãã¡ã¤ã«ããã£ã¬ã¯ããªã®ã³ãã¼
shutil.copy()
åä¸ã®ãã¡ã¤ã«ãã³ãã¼ãã¾ãã ãã®é¢æ°ã¯ããã¡ã¤ã«ã®å 容ã¨ãã¼ããã·ã§ã³ãã³ãã¼ãã¾ããããã¹ã¦ã®ã¡ã¿ãã¼ã¿ãã³ãã¼ããããã§ã¯ããã¾ããã
以ä¸ã®ä¾ã§ãsourceãã¯ã³ãã¼å ãdestinationãã¯ã³ãã¼å ã表ãã¾ãã
import shutil shutil.copy('source.txt', 'destination.txt')
shutil.copytree()
ãã£ã¬ã¯ããªå ¨ä½ãå帰çã«ã³ãã¼ãã¾ãã
shutil.copytree('source_dir', 'destination_dir')
ãã¡ã¤ã«ããã£ã¬ã¯ããªã®ç§»å
shutil.move()
ãã¡ã¤ã«ã¾ãã¯ãã£ã¬ã¯ããªã移åãã¾ãã ãã®é¢æ°ã¯ã移åå ã®ãã¡ã¤ã«ãåé¤ããæ°ããå ´æã«ãã¡ã¤ã«ãä½æãã¾ãã
shutil.move('source.txt', 'new_directory/source.txt')
ãã¡ã¤ã«ããã£ã¬ã¯ããªã®åé¤
shutil.rmtree()
ãã£ã¬ã¯ããªå ¨ä½ãåé¤ãã¾ãã ãã£ã¬ã¯ããªã空ã§ãªãã¦ãåé¤ã§ããããã使ç¨ããéã¯æ³¨æãå¿ è¦ã§ãã
shutil.rmtree('directory_to_delete')
ãã£ã¹ã¯å®¹éã®ç¢ºèª
shutil.disk_usage()
ãã£ã¹ã¯ã®ä½¿ç¨ç¶æ³ï¼ç·å®¹éã使ç¨æ¸ã¿å®¹éã空ã容éï¼ãåå¾ãã¾ãã
usage = shutil.disk_usage('/') print(f"ç·å®¹é: {usage.total // (1024**3)} GB") print(f"使ç¨æ¸ã¿: {usage.used // (1024**3)} GB") print(f"空ã容é: {usage.free // (1024**3)} GB")
/
ã¯Linuxãªã©ã®ãã«ã¼ãããããªãã¡ããã®ã·ã¹ãã ã®å
¥ã£ã¦ãããã£ã¹ã¯ã®ããããã£ã¬ã¯ããªãã¾ãã¯ãã£ã¹ã¯ãã®ãã®ã表ãã¾ãã
ãã®ããã°ã©ã ã¯Windowsã§ãåãã¾ãããWindowsã®ã·ã¹ãã ã®å
¥ã£ã¦ãããã£ã¹ã¯ã¯C:
ã¾ãã¯C:\\
ã¨è¡¨ãã¾ãã
Windowsã§ã¯ãusage = shutil.disk_usage('C:\\')
ãªã©ã§ãåä½ãã¾ãã
ãã¡ã¤ã«ããã£ã¬ã¯ããªã®ã¢ã¼ã«ã¤ã
shutil.make_archive()
ãã£ã¬ã¯ããªãå§ç¸®ãã¦ã¢ã¼ã«ã¤ããä½æããã¢ã¼ã«ã¤ãã®ãã¡ã¤ã«åãè¿ãã¾ãã ã¢ã¼ã«ã¤ãå½¢å¼ã«å¯¾å¿ããæ¡å¼µåãèªåçã«ã¤ãã¾ãã
ãã®é¢æ°ã«ã¯ä»¥ä¸ã®å¼æ°ãããã¾ãï¼
- 第1å¼æ°ï¼base_nameï¼: ä½æããã¢ã¼ã«ã¤ããã¡ã¤ã«ã®ååï¼æ¡å¼µåãå«ã¾ãªãé¨åï¼ããã¹ãå«ãæå®ãå¯è½ã
- 第2å¼æ°ï¼formatï¼: ã¢ã¼ã«ã¤ãã®å½¢å¼ï¼ä¾:
'zip'
,'tar'
ï¼ãå©ç¨å¯è½ãªå½¢å¼ã¯ä»¥ä¸ãåç §ã - 第3å¼æ°ï¼root_dirï¼: ã¢ã¼ã«ã¤ããã¡ã¤ã«ã®ã«ã¼ãã¨ãªããã£ã¬ã¯ããªãã¢ã¼ã«ã¤ãã«å«ã¾ããå ¨ã¦ã®ãã¹ã¯ root_dir ããã®ç¸å¯¾ãã¹ã«ãªããããã©ã«ãã¯ã«ã¬ã³ãã»ãã£ã¬ã¯ããªã
- 第4å¼æ°ï¼base_dirï¼: ã¢ã¼ã«ã¤ããéå§ãããã£ã¬ã¯ããªã¾ãã¯ããã¡ã¤ã«ãããªãã¡ã
base_dir
以ä¸ã®ãã¡ã¤ã«ã¨ãã£ã¬ã¯ããªãã¢ã¼ã«ã¤ãããããbase_dir
ã¯root_dir
ããã®ç¸å¯¾ãã¹ãããã©ã«ãã¯root_dir
ã
å©ç¨å¯è½ãªã¢ã¼ã«ã¤ãå½¢å¼ã¯æ¬¡ã®éãã§ãï¼
- 'zip'
- 'tar'
- 'gztar'
ï¼gzipå§ç¸®ãããtarã¢ã¼ã«ã¤ãï¼
- 'bztar'
ï¼bzip2å§ç¸®ãããtarã¢ã¼ã«ã¤ãï¼
- 'xztar'
ï¼xzå§ç¸®ãããtarã¢ã¼ã«ã¤ãï¼
shutil.unpack_archive()
ã¢ã¼ã«ã¤ãã解åãã¾ãã
次ã®ä¾ã§ã¯ãmake_archive
ã§ä½æãããã®ã¢ã¼ã«ã¤ãã解åãã¾ãã
import shutil # ã¢ã¼ã«ã¤ããä½æ archive_path = shutil.make_archive('example_archive', 'zip', 'source_dir') # ã¢ã¼ã«ã¤ãã解å extract_path = 'extracted_dir' shutil.unpack_archive(archive_path, extract_path)
ãã®ã³ã¼ãã§ã¯ãsource_dir
ãå§ç¸®ãã¦example_archive.zip
ãä½æãããããextracted_dir
ã«è§£åãã¦ãã¾ãã
å¿ç¨ä¾: ã³ãã³ãã©ã¤ã³ãããã£ã¬ã¯ããªã®ã¢ã¼ã«ã¤ãããã³è§£å
以ä¸ã¯ãã³ãã³ãã©ã¤ã³å¼æ°ã使ç¨ãã¦æå®ããããã£ã¬ã¯ããªãzipã¢ã¼ã«ã¤ãããããã¢ã¼ã«ã¤ããã¡ã¤ã«ã解åãããããã¹ã¯ãªããã§ããã¦ã¼ã¶ã¼ã¯ããªãã·ã§ã³ã«ãã£ã¦æä½ãé¸æã§ãã¾ãã
+a
: æå®ããããã£ã¬ã¯ããªãã¢ã¼ã«ã¤ããã¾ãã-a
: æå®ãããã¢ã¼ã«ã¤ããã¡ã¤ã«ã解åãã¾ãã
import shutil import sys from pathlib import Path def archive_directory(directory, output_name): directory = Path(directory) if not directory.is_dir(): print(f"ã¨ã©ã¼: {directory} ãåå¨ããªãããã¾ãã¯ãã£ã¬ã¯ããªã§ã¯ããã¾ãã") return # ã¢ã¼ã«ã¤ãä½æ archive_path = shutil.make_archive(output_name, 'zip', directory) print(f"ã¢ã¼ã«ã¤ããä½æãã¾ãã: {archive_path}") def extract_archive(archive_file, output_dir): archive_file = Path(archive_file) output_dir = Path(output_dir) if not archive_file.exists(): print(f"ã¨ã©ã¼: {archive_file} ãåå¨ãã¾ãã") return # ã¢ã¼ã«ã¤ã解å shutil.unpack_archive(archive_file, output_dir) print(f"ã¢ã¼ã«ã¤ãã解åãã¾ãã: {output_dir}") def usage(): print("使ç¨æ¹æ³:") print(" ã¢ã¼ã«ã¤ãä½æ: python script.py +a <ãã£ã¬ã¯ããªå> <åºåãã¡ã¤ã«å>") print(" ã¢ã¼ã«ã¤ã解å: python script.py -a <ã¢ã¼ã«ã¤ããã¡ã¤ã«å> <解åå ãã£ã¬ã¯ããª>") if len(sys.argv) != 4: usage() sys.exit(1) option = sys.argv[1] if option == "+a": directory = sys.argv[2] output_name = sys.argv[3] archive_directory(directory, output_name) elif option == "-a": archive_file = sys.argv[2] output_dir = sys.argv[3] extract_archive(archive_file, output_dir) else: usage() sys.exit(1)
使ç¨ä¾
ä¸è¨ã®ããã°ã©ã ãar-1.py
ã¨ããååã§ä¿åãã¾ãã
ãã£ã¬ã¯ããªã®ã¢ã¼ã«ã¤ã
端æ«ãèµ·åãã¾ãã
次ã®ã³ãã³ãã§example_dir
ãoutput_archive.zip
ã¨ãã¦ã¢ã¼ã«ã¤ããã¾ãã
python ar-1.py +a example_dir output_archive
å®è¡çµæï¼
- example_dir
ãoutput_archive.zip
ã¨ããååã§ã¢ã¼ã«ã¤ãåããã¾ãã
ã¢ã¼ã«ã¤ããã¡ã¤ã«ã®è§£å
次ã®ã³ãã³ãã§output_archive.zip
ãextracted_dir
ã«è§£åãã¾ãã
python ar-1.py -a output_archive.zip extracted_dir
å®è¡çµæï¼
- output_archive.zip
ã®å
容ãextracted_dir
ã¨ãããã£ã¬ã¯ããªã«å±éããã¾ãã
ã¾ã¨ã
æ¬è¨äºã§ã¯ã以ä¸ã®å 容ãå¦ã³ã¾ããã
shutil
ã¢ã¸ã¥ã¼ã«ã®æ¦è¦ã¨åºæ¬çãªä½¿ãæ¹- ãã¡ã¤ã«ããã£ã¬ã¯ããªã®ã³ãã¼ã移åãåé¤
- ã¢ã¼ã«ã¤ãã®ä½æã¨è§£åï¼å½¢å¼ãå¼æ°ã®è©³ç´°ãå«ãï¼
- ã³ãã³ãã©ã¤ã³ãã¼ã«ã¨ãã¦ã®ã¢ã¼ã«ã¤ãä½æã¹ã¯ãªãã
shutil
ã¢ã¸ã¥ã¼ã«ã¯ãPythonã§ãã¡ã¤ã«ããã£ã¬ã¯ããªãæä½ããéã®å¼·åãªãã¼ã«ã§ãã
ç¹ã«ããã¯ã¢ãããã¢ã¼ã«ã¤ãåãªã©ã«å½¹ç«ã¡ã¾ãã