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ứ.

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

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

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

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

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

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

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

Hãy thử: //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

Đỗ 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]

Chủ Đề