Cách đổi tên file trong python

Trong bài viết này, Quantrimang sẽ cùng bạn tìm hiểu về quản lý file và thư mục bằng Python, cụ thể là việc là tạo thư mục, đổi tên thư mục, liệt kê các thư mục và làm việc với chúng.

Thư mục trong Python

Ở bài tìm hiểu trước, chúng ta đã làm quen với file và các thao tác làm việc với file trong Python. Ở đây bạn có thể hiểu đơn giản rằng thư mục là nơi chứa tất cả các file. Nên sắp xếp code cũng như file trong các thư mục khác nhau để dễ dàng quản lý mọi thứ.

Cách đổi tên file trong python

Python cũng cung cấp rất nhiều phương thức để xử lý các hoạt động đa dạng liên quan tới thư mục. Module os có được xây dựng để cung cấp các phương thức giúp bạn tạo, xóa, và thay đổi các thư mục.

Hiển thị thư mục hiện tại

Phương thức getcwd() hiển thị thư mục đang làm việc hiện tại, trả về kết quả dưới dạng một chuỗi.

Chúng ta cũng có thể sử dụng phương thức getcwdb() để nhận về kết quả dưới dạng byte.

>>> import os

>>> os.getcwd()
'C:\\Program Files\\PyScripter'

>>> os.getcwdb()
b'C:\\Program Files\\PyScripter'

Thay đổi thư mục hiện tại

Thư mục làm việc hiện tại có thể được thay đổi bằng phương thức chdir().

chdir() nhận một tham số là tên thư mục bạn muốn tới từ thư mục hiện tại. Có thể sử dụng cả dấu gạch chéo (/) hoặc dấu gạch chéo ngược (\) để tách các phần tử trong đường dẫn, nhưng tốt nhất vẫn nên sử dụng dấu gạch ngược (\).

>>> os.chdir('C:\\Python33')

>>> print(os.getcwd())
C:\Python33

Danh sách thư mục và file

Bạn có thể liệt kê tất cả các tệp và thư mục con bên trong một thư mục bằng cách sử dụng phương thức listdir().

Phương thức này nhận một đường dẫn và trả về danh sách thư mục con và các file trong đường dẫn đó.

Nếu không có đường dẫn nào được chỉ định, kết quả trả về sẽ truy xuất từ thư mục làm việc hiện tại.

>>> print(os.getcwd())
C:\Python33

>>> os.listdir()
['DLLs',
'Doc',
'include',
'Lib',
'libs',
'LICENSE.txt',
'NEWS.txt',
'python.exe',
'pythonw.exe',
'README.txt',
'Scripts',
'tcl',
'Tools']

>>> os.listdir('G:\\')
['$RECYCLE.BIN',
'Movies',
'Music',
'Photos',
'Series',
'System Volume Information']

Tạo một thư mục mới

Để tạo các thư mục mới, bạn sử dụng phương thức mkdir() của Module os.

Bạn có thể chọn nơi chứa thư mục mới bằng cách ghi đầy đủ đường dẫn tới nơi muốn tạo. Nếu đường dẫn đầy đủ không được chỉ định, thư mục mới sẽ được tạo trong thư mục làm việc hiện tại.

>>> os.mkdir('test')

>>> os.listdir()
['test']

Đổi tên thư mục hoặc tên file

Bạn sử dụng phương thức rename() để đổi tên một thư mục hoặc một tập tin.

>>> os.listdir()
['test']

>>> os.rename('test','new_one')

>>> os.listdir()
['new_one']

Xóa bỏ thư mục hoặc file

Để gỡ bỏ một file, bạn sử dụng phương thức remove()

Tương tự nhưng để xóa toàn bộ thư mục, sử dụng rmdir()

>>> os.listdir()
['new_one', 'old.txt']

>>> os.remove('old.txt')
>>> os.listdir()
['new_one']

>>> os.rmdir('new_one')
>>> os.listdir()
[]

Lưu ý rằng phương thức rmdir() chỉ có thể xóa các thư mục rỗng.

Vậy để loại bỏ một thư mục không rỗng, chúng ta có thể sử dụng phương thức rmtree() bên trong module shutil.

>>> os.listdir()
['test']

>>> os.rmdir('test')
Traceback (most recent call last):
...
OSError: [WinError 145] The directory is not empty: 'test'

>>> import shutil

>>> shutil.rmtree('test')
>>> os.listdir()
[]

Vậy là bạn đã làm quen được những thao tác cơ bản nhất với thư mục rồi. Module os trong Python vẫn còn cung cấp rất nhiều các phương thức hữu ích khác để thực hiện các hoạt động với file và thư mục nữa. Bạn hãy theo dõi trong những bài học tiếp theo của Quantrimang nhé.

Chúc bạn học Python thật vui!

Xem thêm:

  • Ma trận trong Python
  • Module trong Python
  • Bài tập Python có lời giải

Bài trước: Làm việc với File trong Python

Bài tiếp: Error và Exception trong Python

10/22/2008 1:33:23 PM

Cách đổi tên file trong python

Trịnh Duy Cường · Trịnh Duy Cường 13:33 22/10/2008

Có cách nào dễ dàng để đổi tên một nhóm các tệp đã có trong một thư mục bằng Python không?

Ví dụ: Tôi có một thư mục chứa đầy các tệp * .doc và tôi muốn đổi tên chúng theo cách nhất quán.

X.doc -> "mới (X) .doc"

Y.doc -> "mới (Y) .doc"

  • python
  • file-io
  • rename
  • batch-rename

88 hữu ích 0 bình luận 150k xem chia sẻ

answer

Cách đổi tên file trong python

Trịnh Vân Trang · Trịnh Vân Trang 18:59 22/10/2008

Việc đổi tên như vậy khá dễ dàng, ví dụ với các mô đun os và toàn cầu :

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))

Sau đó, bạn có thể sử dụng nó trong ví dụ của bạn như thế này:

rename(r'c:\temp\xx', r'*.doc', r'new(%s)')

Ví dụ trên sẽ chuyển đổi tất cả *.doccác tệp trong c:\temp\xxthư mục sang new(%s).doc, %stên cơ sở trước đó của tệp (không có phần mở rộng).

99 hữu ích 2 bình luận chia sẻ

answer

Cách đổi tên file trong python

Phan Quế Phương · Phan Quế Phương 14:53 27/10/2011

Tôi thích viết một lớp lót nhỏ cho mỗi lần thay thế mà tôi phải làm thay vì tạo một mã chung và phức tạp hơn. Ví dụ:

Điều này thay thế tất cả các dấu gạch dưới bằng dấu gạch nối trong bất kỳ tệp không bị ẩn nào trong thư mục hiện tại

import os [os.rename(f, f.replace('_', '-')) for f in os.listdir('.') if not f.startswith('.')]

118 hữu ích 5 bình luận chia sẻ

answer

Cách đổi tên file trong python

Bùi Tuấn Anh · Bùi Tuấn Anh 19:30 22/10/2008

Nếu bạn không phiền khi sử dụng các biểu thức thông thường, thì chức năng này sẽ cung cấp cho bạn nhiều sức mạnh trong việc đổi tên các tệp:

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))

Vì vậy, trong ví dụ của bạn, bạn có thể làm (giả sử đó là thư mục hiện tại nơi chứa các tệp):

renamer("*.doc", r"^(.*)\.doc$", r"new(\1).doc")

nhưng bạn cũng có thể quay lại tên tập tin ban đầu:

renamer("*.doc", r"^new\((.*)\)\.doc", r"\1.doc")

và hơn thế nữa.

21 hữu ích 0 bình luận chia sẻ

answer

Cách đổi tên file trong python

Huỳnh Huyền Anh · Huỳnh Huyền Anh 09:46 04/12/2013

Tôi có điều này chỉ đơn giản là đổi tên tất cả các tệp trong thư mục con của thư mục

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)))

Tôi đang thay thế tất cả các lần xuất hiện của old_str bằng bất kỳ trường hợp nào bằng new_str.

11 hữu ích 1 bình luận chia sẻ

answer

Cách đổi tên file trong python

Lê Thăng Long · Lê Thăng Long 13:37 22/10/2008

Hãy thử: http://www.mattweber.org/2007/03/04/python-script-renamepy/

Tôi thích đặt các tệp nhạc, phim và ảnh của mình theo một cách nhất định. Khi tôi tải xuống các tệp từ internet, chúng thường không tuân theo quy ước đặt tên của tôi. Tôi thấy mình tự đổi tên từng tệp để phù hợp với phong cách của mình. Điều này đã thực sự cũ rất nhanh, vì vậy tôi quyết định viết một chương trình để làm điều đó cho tôi.

Chương trình này có thể chuyển đổi tên tệp thành tất cả chữ thường, thay thế các chuỗi trong tên tệp bằng bất cứ thứ gì bạn muốn và cắt bất kỳ số lượng ký tự nào từ mặt trước hoặc mặt sau của tên tệp.

Mã nguồn của chương trình cũng có sẵn.

6 hữu ích 2 bình luận chia sẻ

answer

Cách đổi tên file trong python

Đỗ Trường Sinh · Đỗ Trường Sinh 05:56 15/04/2012

Tôi đã tự viết một kịch bản python. Nó nhận làm đối số đường dẫn của thư mục chứa các tệp và mẫu đặt tên mà bạn muốn sử dụng. Tuy nhiên, nó đổi tên bằng cách đính kèm một số tăng (1, 2, 3, v.v.) vào mẫu đặt tên bạn đưa ra.

import os import sys # checking whether path and filename are given. if len(sys.argv) != 3: print "Usage : python rename.py " 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

Hy vọng điều này làm việc cho bạn.

6 hữu ích 0 bình luận chia sẻ

answer

Cách đổi tên file trong python

Hồ Mộng Vy · Hồ Mộng Vy 08:37 30/04/2017

directoryName = "Photographs" filePath = os.path.abspath(directoryName) filePathWithSlash = filePath + "\\" for counter, filename in enumerate(os.listdir(directoryName)): filenameWithPath = os.path.join(filePathWithSlash, filename) os.rename(filenameWithPath, filenameWithPath.replace(filename,"DSC_" + \ str(counter).zfill(4) + ".jpg" )) # e.g. filename = "photo1.jpg", directory = "c:\users\Photographs" # The string.replace call swaps in the new filename into # the current filename within the filenameWitPath string. Which # is then used by os.rename to rename the file in place, using the # current (unmodified) filenameWithPath. # os.listdir delivers the filename(s) from the directory # however in attempting to "rename" the file using os # a specific location of the file to be renamed is required. # this code is from Windows

2 hữu ích 0 bình luận chia sẻ

answer

Cách đổi tên file trong python

Hoàng Mỹ Hân · Hoàng Mỹ Hân 21:15 18/10/2017

Tôi đã có một vấn đề tương tự, nhưng tôi muốn nối văn bản vào đầu tên tệp của tất cả các tệp trong một thư mục và sử dụng một phương pháp tương tự. Xem ví dụ dưới đây:

folder = r"R:\mystuff\GIS_Projects\Website\2017\PDF" import os for root, dirs, filenames in os.walk(folder): for filename in filenames: fullpath = os.path.join(root, filename) filename_split = os.path.splitext(filename) # filename will be filename_split[0] and extension will be filename_split[1]) print fullpath print filename_split[0] print filename_split[1] os.rename(os.path.join(root, filename), os.path.join(root, "NewText_2017_" + filename_split[0] + filename_split[1]))

2 hữu ích 0 bình luận chia sẻ

answer

Cách đổi tên file trong python

Đỗ Yến Nhi · Đỗ Yến Nhi 21:43 03/09/2018

Ở trong thư mục mà bạn cần thực hiện đổi tên.

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

2 hữu ích 1 bình luận chia sẻ

answer

Cách đổi tên file trong python

Hồ Minh Nhật · Hồ Minh Nhật 11:59 17/08/2017

Đối với tôi trong thư mục của tôi, tôi có nhiều thư mục con, mỗi thư mục con có rất nhiều hình ảnh tôi muốn thay đổi tất cả các hình ảnh phụ thành 1.jpg ~ n.jpg

def batch_rename(): base_dir = 'F:/ad_samples/test_samples/' sub_dir_list = glob.glob(base_dir + '*') # print sub_dir_list # like that ['F:/dir1', 'F:/dir2'] for dir_item in sub_dir_list: files = glob.glob(dir_item + '/*.jpg') i = 0 for f in files: os.rename(f, os.path.join(dir_item, str(i) + '.jpg')) i += 1

(câu trả lời của riêng mys) https://stackoverflow.com/a/45734381/6329006

1 hữu ích 0 bình luận chia sẻ

answer

Cách đổi tên file trong python

Ngô Hồng Oanh · Ngô Hồng Oanh 15:57 02/04/2018

# another regex version # usage example: # replacing an underscore in the filename with today's date # rename_files('..\\output', '(.*)(_)(.*\.CSV)', '\g<1>_20180402_\g<3>') def rename_files(path, pattern, replacement): for filename in os.listdir(path): if re.search(pattern, filename): new_filename = re.sub(pattern, replacement, filename) new_fullname = os.path.join(path, new_filename) old_fullname = os.path.join(path, filename) os.rename(old_fullname, new_fullname) print('Renamed: ' + old_fullname + ' to ' + new_fullname

1 hữu ích 0 bình luận chia sẻ

answer

Cách đổi tên file trong python

Phan Minh Trung · Phan Minh Trung 04:46 09/01/2019

import glob2 import os def rename(f_path, new_name): filelist = glob2.glob(f_path + "*.ma") count = 0 for file in filelist: print("File Count : ", count) filename = os.path.split(file) print(filename) new_filename = f_path + new_name + str(count + 1) + ".ma" os.rename(f_path+filename[1], new_filename) print(new_filename) count = count + 1

0 hữu ích 0 bình luận chia sẻ

Xem nguồn: https://stackoverflow.com//questions/225735/batch-renaming-of-files-in-a-directory

loading

loading