[python] 디렉토리에있는 파일의 일괄 이름 바꾸기
Python을 사용하여 디렉토리에 이미 포함 된 파일 그룹의 이름을 쉽게 바꿀 수있는 방법이 있습니까?
예 : * .doc 파일로 가득 찬 디렉토리가 있고 일관된 방식으로 이름을 바꾸고 싶습니다.
X.doc-> “new (X) .doc”
Y.doc-> “new (Y) .doc”
답변
이러한 이름 변경은 예를 들어 os 및 glob 모듈 과 같이 매우 쉽습니다 .
import glob, os
def rename(dir, pattern, titlePattern):
for pathAndFilename in glob.iglob(os.path.join(dir, pattern)):
title, ext = os.path.splitext(os.path.basename(pathAndFilename))
os.rename(pathAndFilename,
os.path.join(dir, titlePattern % title + ext))
그런 다음 다음과 같이 예제에서 사용할 수 있습니다.
rename(r'c:\temp\xx', r'*.doc', r'new(%s)')
위의 예는 dir의 모든 *.doc
파일을 로 변환합니다 . 여기서는 파일 의 이전 기본 이름 (확장자 없음)입니다.c:\temp\xx
new(%s).doc
%s
답변
더 일반적이고 복잡한 코드를 만드는 대신해야 할 각 교체에 대해 하나의 작은 라이너를 작성하는 것을 선호합니다. 예 :
이렇게하면 현재 디렉터리에있는 숨겨지지 않은 파일의 모든 밑줄이 하이픈으로 바뀝니다.
import os
[os.rename(f, f.replace('_', '-')) for f in os.listdir('.') if not f.startswith('.')]
답변
정규 표현식을 사용해도 괜찮다면이 함수는 파일 이름을 바꾸는 데 많은 힘을 줄 것입니다.
import re, glob, os
def renamer(files, pattern, replacement):
for pathname in glob.glob(files):
basename= os.path.basename(pathname)
new_filename= re.sub(pattern, replacement, basename)
if new_filename != basename:
os.rename(
pathname,
os.path.join(os.path.dirname(pathname), new_filename))
따라서 귀하의 예에서 할 수 있습니다 (파일이있는 현재 디렉토리라고 가정).
renamer("*.doc", r"^(.*)\.doc$", r"new(\1).doc")
그러나 초기 파일 이름으로 롤백 할 수도 있습니다.
renamer("*.doc", r"^new\((.*)\)\.doc", r"\1.doc")
그리고 더.
답변
폴더의 하위 폴더에있는 모든 파일의 이름을 간단히 변경하려면
import os
def replace(fpath, old_str, new_str):
for path, subdirs, files in os.walk(fpath):
for name in files:
if(old_str.lower() in name.lower()):
os.rename(os.path.join(path,name), os.path.join(path,
name.lower().replace(old_str,new_str)))
old_str의 모든 발생을 new_str로 모든 경우로 대체하고 있습니다.
답변
시도 : http://www.mattweber.org/2007/03/04/python-script-renamepy/
내 음악, 영화, 사진 파일 이름을 특정 방식으로 지정하는 것을 좋아합니다. 인터넷에서 파일을 다운로드 할 때 일반적으로 내 명명 규칙을 따르지 않습니다. 내 스타일에 맞게 각 파일의 이름을 수동으로 변경했습니다. 이건 정말 빨리 늙었 기 때문에 저를위한 프로그램을 작성하기로 결정했습니다.
이 프로그램은 파일 이름을 모두 소문자로 변환하고, 파일 이름의 문자열을 원하는대로 바꾸고, 파일 이름의 앞이나 뒤에서 원하는 수의 문자를자를 수 있습니다.
프로그램의 소스 코드도 사용할 수 있습니다.
답변
저는 파이썬 스크립트를 직접 작성했습니다. 파일이있는 디렉토리의 경로와 사용할 이름 지정 패턴을 인수로 사용합니다. 그러나 사용자가 지정한 이름 지정 패턴에 증분 번호 (1, 2, 3 등)를 첨부하여 이름을 바꿉니다.
import os
import sys
# checking whether path and filename are given.
if len(sys.argv) != 3:
print "Usage : python rename.py <path> <new_name.extension>"
sys.exit()
# splitting name and extension.
name = sys.argv[2].split('.')
if len(name) < 2:
name.append('')
else:
name[1] = ".%s" %name[1]
# to name starting from 1 to number_of_files.
count = 1
# creating a new folder in which the renamed files will be stored.
s = "%s/pic_folder" % sys.argv[1]
try:
os.mkdir(s)
except OSError:
# if pic_folder is already present, use it.
pass
try:
for x in os.walk(sys.argv[1]):
for y in x[2]:
# creating the rename pattern.
s = "%spic_folder/%s%s%s" %(x[0], name[0], count, name[1])
# getting the original path of the file to be renamed.
z = os.path.join(x[0],y)
# renaming.
os.rename(z, s)
# incrementing the count.
count = count + 1
except OSError:
pass
이것이 당신을 위해 작동하기를 바랍니다.
답변
이름 변경을 수행해야하는 디렉토리에 있어야합니다.
import os
# get the file name list to nameList
nameList = os.listdir()
#loop through the name and rename
for fileName in nameList:
rename=fileName[15:28]
os.rename(fileName,rename)
#example:
#input fileName bulk like :20180707131932_IMG_4304.JPG
#output renamed bulk like :IMG_4304.JPG