Python에서 파일을 이동하는 방법
Python os
인터페이스를 살펴 보았지만 파일을 이동하는 방법을 찾을 수 없습니다. 어떻게에 해당 할 것이다 $ mv ...
파이썬을?
>>> source_files = '/PATH/TO/FOLDER/*'
>>> destination_folder = 'PATH/TO/FOLDER'
>>> # equivalent of $ mv source_files destination_folder
os.rename()
, shutil.move()
또는os.replace()
모두 동일한 구문을 사용합니다.
import os
import shutil
os.rename("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
shutil.move("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
os.replace("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
file.foo
소스 및 대상 인수 모두에 파일 이름 ( )을 포함해야합니다 . 변경되면 파일의 이름이 변경되고 이동됩니다. 또한 처음 두 경우에는 새 파일이 생성되는 디렉토리가 이미 존재해야합니다. Windows에서는 해당 이름을 가진 파일이 없어야합니다. 그렇지 않으면 예외가 발생하지만 os.replace()
그 경우에도 자동으로 파일을 대체합니다.
다른 답변에 대한 의견에서 언급했듯이 대부분의 경우 shutil.move
단순히 전화하십시오 os.rename
. 그러나 대상이 원본과 다른 디스크에있는 경우 원본 파일을 복사 한 다음 삭제합니다.
비록 os.rename()
및 shutil.move()
두 이름 바꾸기 파일 것, 유닉스 MV 명령에 가장 가까운 명령이다 shutil.move()
. 차이점은 os.rename()
소스와 대상이 다른 디스크에 있으면 shutil.move()
작동하지 않고 파일이 어떤 디스크에 있는지 상관하지 않는다는 것입니다.
os.rename 또는 shutil.move의 경우 모듈을 가져와야합니다. 모든 파일을 이동하는 데 * 문자가 필요하지 않습니다.
/ opt / awesome에 awesome.txt라는 파일이있는 source라는 폴더가 있습니다.
in /opt/awesome
○ → ls
source
○ → ls source
awesome.txt
python
>>> source = '/opt/awesome/source'
>>> destination = '/opt/awesome/destination'
>>> import os
>>> os.rename(source, destination)
>>> os.listdir('/opt/awesome')
['destination']
os.listdir을 사용하여 폴더 이름이 실제로 변경되었는지 확인했습니다. 여기에 목적지를 소스로 다시 옮기는 Shutil이 있습니다.
>>> import shutil
>>> shutil.move(destination, source)
>>> os.listdir('/opt/awesome/source')
['awesome.txt']
이번에는 내가 만든 awesome.txt 파일이 존재하는지 확인하기 위해 소스 폴더 내부를 확인했습니다. 저기있어 :)
이제 폴더와 그 파일을 소스에서 대상으로 이동했다가 다시 돌아 왔습니다.
Python 3.4 이후에는 pathlib
의 클래스 Path
를 사용 하여 파일을 이동할 수도 있습니다.
Path("path/to/current/file.foo").rename("path/to/new/destination/for/file.foo")
https://docs.python.org/3.4/library/pathlib.html#pathlib.Path.rename
이것은 내가 현재 사용하고있는 것입니다.
import os, shutil
path = "/volume1/Users/Transfer/"
moveto = "/volume1/Users/Drive_Transfer/"
files = os.listdir(path)
files.sort()
for f in files:
src = path+f
dst = moveto+f
shutil.move(src,dst)
이제 완전히 작동합니다. 도움이 되었기를 바랍니다.
편집하다:
I've turned this into a function, that accepts a source and destination directory, making the destination folder if it doesn't exist, and moves the files. Also allows for filtering of the src files, for example if you only want to move images, then you use the pattern '*.jpg'
, by default, it moves everything in the directory
import os, shutil, pathlib, fnmatch
def move_dir(src: str, dst: str, pattern: str = '*'):
if not os.path.isdir(dst):
pathlib.Path(dst).mkdir(parents=True, exist_ok=True)
for f in fnmatch.filter(os.listdir(src), pattern):
shutil.move(os.path.join(src, f), os.path.join(dst, f))
The accepted answer is not the right one, because the question is not about renaming a file into a file, but moving many files into a directory. shutil.move
will do the work, but for this purpose os.rename
is useless (as stated on comments) because destination must have an explicit file name.
Based on the answer described here, using subprocess
is another option.
Something like this:
subprocess.call("mv %s %s" % (source_files, destination_folder), shell=True)
I am curious to know the pro's and con's of this method compared to shutil
. Since in my case I am already using subprocess
for other reasons and it seems to work I am inclined to stick with it.
Is it system dependent maybe?
This is solution, which does not enables shell
using mv
.
import subprocess
source = 'pathToCurrent/file.foo'
destination = 'pathToNew/file.foo'
p = subprocess.Popen(['mv', source, destination], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
res = p.communicate()[0].decode('utf-8').strip()
if p.returncode:
print 'ERROR: ' + res
import os,shutil
current_path = "" ## source path
new_path = "" ## destination path
os.chdir(current_path)
for files in os.listdir():
os.rename(files, new_path+'{}'.format(f))
shutil.move(files, new_path+'{}'.format(f)) ## to move files from
different disk ex. C: --> D:
참고URL : https://stackoverflow.com/questions/8858008/how-to-move-a-file-in-python
'development' 카테고리의 다른 글
jQuery / JavaScript : iframe 콘텐츠 액세스 (0) | 2020.09.29 |
---|---|
Git : 두 가지의 가장 최근 공통 조상 찾기 (0) | 2020.09.29 |
jQuery UI 대화 상자에서 닫기 버튼을 제거하는 방법은 무엇입니까? (0) | 2020.09.29 |
Docker 이미지와 컨테이너의 차이점은 무엇입니까? (0) | 2020.09.29 |
PHP 임의 문자열 생성기 (0) | 2020.09.29 |