Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 파일 이동하기: shutil.move() 완벽 가이드

파이썬의 shutil.move() 메서드는 컴퓨터 내에서 파일을 다른 위치로 이동시키는 기능을 제공합니다. 이 메서드는 shutil 모듈에 포함되어 있으며, 사용 전에 반드시 해당 모듈을 임포트해야 합니다.

파일 이동은 파이썬 프로그램에서 매우 흔히 수행되는 작업입니다. 예를 들어, 파일을 생성하는 프로그램을 만든다고 가정해 보겠습니다. 새로 만들 파일들을 저장할 공간을 확보하기 위해 기존 폴더의 파일들을 다른 곳으로 옮기고 싶을 수 있습니다.

바로 이럴 때 shutil.move() 함수가 유용합니다. 이 함수를 사용하면 시스템 내에서 파일을 한 폴더에서 다른 폴더로 손쉽게 이동할 수 있습니다. 이 글에서는 실제 예제와 함께 shutil.move() 함수를 활용해 파일을 이동하는 방법을 자세히 알아보겠습니다.

파이썬 shutil 모듈이란?

shutil 모듈은 파일에 대해 실행할 수 있는 다양한 고급 연산을 제공합니다. os 라이브러리와 달리, shutil은 여러 파일을 묶어서 처리할 수 있는 함수들을 포함하고 있습니다.

이 글에서는 파이썬으로 파일을 이동할 수 있게 해주는 shutil.move() 함수에 초점을 맞춰 설명하겠습니다.

move() 함수를 살펴보기 전에 먼저 코드에 shutil 라이브러리를 임포트해야 합니다. 다음과 같은 임포트 문을 사용하면 됩니다:

import shutil

파이썬으로 파일 이동하기

shutil.move() 함수는 컴퓨터에 있는 파일을 이동시킵니다. 이 메서드는 이동하려는 파일의 경로와 새 파일 경로를 인자로 받습니다.

이 함수의 기본 문법은 다음과 같습니다:

shutil.move(source, destination)

shutil.move()는 두 개의 매개변수를 받습니다:

  • source path(원본 경로): 이동하려는 파일의 경로
  • destination path(대상 경로): 파일을 이동시킬 위치의 경로

move() 함수는 이동된 파일의 경로를 반환합니다.

만약 대상 위치에 같은 이름의 파일이 이미 존재한다면, 기존 파일은 덮어쓰기됩니다.

지정하는 파일 경로는 절대 경로와 상대 경로 모두 가능합니다.

절대 경로는 파일까지 직접 연결되는 완전한 경로를 의미합니다(예: /home/user/file.txt). 상대 경로는 파이썬 프로그램이 실행되는 디렉터리를 기준으로 한 위치를 의미합니다(예: file.txt).

또한 존재하지 않는 대상 디렉터리를 지정하면 새 디렉터리가 자동으로 생성됩니다.

참고로 os 라이브러리에는 주로 파일 이름 변경에 사용되는 os.rename() 메서드가 있는데, 이 메서드로도 파일을 이동할 수 있습니다. 하지만 shutil 모듈은 파일 이동을 위해 특별히 설계된 것이므로, 단순히 파일을 이동하는 작업이라면 os.rename()보다 shutil.move()가 더 직관적이고 이해하기 쉽습니다.

파이썬 파일 이동 예제

지금부터 shutil.move() 함수의 실제 사용 예제 몇 가지를 살펴보겠습니다.

단일 파일 이동하기

현재 작업 디렉터리에 있는 raw_data.csv라는 파일을 같은 위치의 data라는 디렉터리로 이동하고 싶다고 가정해 보겠습니다. 다음 코드를 사용하면 됩니다:

import shutil

source = "raw_data.csv"
destination = "data"

new_path = shutil.move(source, destination)

print(new_path)

실행 결과는 다음과 같습니다:

data/raw_data.csv

먼저 shutil 라이브러리를 임포트했습니다. 그다음 두 개의 변수를 선언했습니다. source 변수에는 이동하려는 파일의 이름이 저장되고, destination 변수에는 파일을 옮길 디렉터리의 이름이 저장됩니다.

이 예제에서는 원본과 대상 모두 상대 경로를 사용했습니다. 즉, raw_data.csv 파일과 data 디렉터리는 파이썬 파일과 동일한 디렉터리에 있는 것을 가리킵니다. 만약 파이썬 파일이 /home/user/program에 저장되어 있다면, 참조되는 파일과 디렉터리도 그 디렉터리 안에 있는 것들입니다.

그다음 shutil.move()를 호출해 파일을 이동하고, 그 결과(이동된 파일의 경로)를 new_path 변수에 할당합니다. 마지막으로 new_path 값을 출력하면 새 파일의 경로가 표시됩니다.

이렇게 파이썬으로 파일을 성공적으로 이동했습니다.

참고: 파일을 이동할 때 사용한 것과 동일한 문법으로 폴더(디렉터리)도 이동할 수 있습니다.

파일을 이동하면서 이름 바꾸기

shutil.move() 함수를 사용하면 파일을 이동하는 동시에 이름을 변경할 수도 있습니다.

raw_data.csv 파일을 data 폴더로 이동하면서, 파일 이름을 raw_data_2019.csv로 바꾸고 싶다고 가정해 보겠습니다. 다음 코드를 사용하면 됩니다:

import shutil

source = "raw_data.csv"
destination = "data/raw_data_2019.csv"

new_path = shutil.move(source, destination)

print(new_path)

실행 결과는 다음과 같습니다:

data/raw_data_2019.csv

새 파일의 대상 경로를 지정할 때 새 이름도 함께 지정했습니다. 대상을 data/raw_data_2019.csv로 지정했기 때문에, 파일이 이동될 때 data 디렉터리로 옮겨지고 새 파일 이름은 raw_data_2019.csv가 됩니다.

여러 파일 한 번에 이동하기

shutil.move() 함수는 여러 파일을 이동할 때도 활용할 수 있습니다. 이때는 os 라이브러리도 함께 사용합니다. os.listdir() 메서드를 사용하면 특정 디렉터리에 있는 파일 목록을 가져올 수 있습니다.

/home/user/data 디렉터리의 모든 파일을 /home/user/old_data라는 새 디렉터리로 이동하고 싶다고 가정해 보겠습니다. data 디렉터리에는 다음 파일들이 들어 있습니다:

  • /home/user/data/data.csv
  • /home/user/data/old_data.csv

다음 코드를 사용하면 됩니다:

import shutil
import os

source = "/home/user/data"
destination = "/home/user/old_data"

files = os.listdir(source)

for file in files:
	new_path = shutil.move(f"{source}/{file}", destination)
	print(new_path)

실행 결과는 다음과 같습니다:

/home/user/old_data/data.csv
/home/user/old_data/old_data.csv

코드를 하나씩 살펴보겠습니다. 먼저 shutil과 os 라이브러리를 프로그램에 임포트합니다. 그다음 내용물을 이동할 폴더의 절대 경로와, 그 내용물이 옮겨질 대상 폴더의 경로를 지정합니다.

이어서 os.listdir()을 사용해 이동할 폴더 안의 모든 파일 목록을 가져옵니다. 그리고 파이썬 for 루프로 각 파일을 순회하면서, shutil.move()를 호출해 각 파일을 destination 폴더로 하나씩 이동시킵니다.

move() 함수 호출 시 f-string을 사용해 이동하려는 파일의 전체 경로를 지정했습니다. 코드는 새로 이동된 파일들의 경로를 화면에 출력합니다.

마무리

shutil.move() 함수는 컴퓨터 내에서 파일을 한 위치에서 다른 위치로 이동시키는 기능을 합니다. 이동하려는 파일의 경로와 새 경로를 반드시 지정해야 합니다.

단일 파일 이동부터 이름 변경, 여러 파일 일괄 이동까지, shutil.move() 하나만 잘 활용해도 파이썬에서 파일 관리 작업을 훨씬 효율적으로 처리할 수 있습니다. 오늘 배운 예제들을 직접 따라 해 보며 실력을 키워보세요.