Bạn đã bao giờ cần thay đổi phần mở rộng tệp cho mọi tệp trong thư mục hiện tại nhưng không muốn phải thực hiện thủ công cho mọi tệp chưa?
Bash
Đổi tên tệp có phần mở rộng
for file in *.old; do mv "$file" "$[basename "$file" .old].new" done
Xóa tệp có phần mở rộng
for file in *.old; do rm "$file" done
Thay thế tất cả các lần xuất hiện trong tệp bằng phần mở rộng
for file in *.old; do sed -i 's/replaceMe/replaceWith/g' $file done
Thay thế tất cả các lần xuất hiện trong tất cả các tệp
for file in *.*; do sed -i 's/replaceMe/replaceWith/g' $file done
con trăn
Đổi tên tệp có phần mở rộng
import os, sys for filename in os.listdir[]: if not os.path.isfile[filename]: continue newname = filename.replace['.old', '.new'] os.rename[filename, newname]
Xóa tệp có phần mở rộng
import os, sys for filename in os.listdir[]: if not os.path.isfile[filename]: continue if not filename.endswith[".old"]: continue os.remove[filename]
Thay thế tất cả các lần xuất hiện trong tệp bằng phần mở rộng
import os, sys for filename in os.listdir[]: if not os.path.isfile[filename]: continue if not filename.endswith[".old"]: continue f = open[filename, "r"] contents = f.read[] f.close[] contents = contents.replace["replaceMe", "replaceWith"] f = open[filename, "w"] f.write[contents]
Thay thế tất cả các lần xuất hiện trong tất cả các tệp
import os, sys for filename in os.listdir[]: if not os.path.isfile[filename]: continue f = open[filename, "r"] contents = f.read[] f.close[] contents = contents.replace["replaceMe", "replaceWith"] f = open[filename, "w"] f.write[contents]
Trong tất cả những điều này, thay thế. cũ và. mới với các phần mở rộng tệp bạn chọn và thay thế tất cả các lần thay thế của tôi bằng thay thếWith trong tất cả các tệp có. phần mở rộng tệp cũ, thay thế replaceMe và replaceWith bằng văn bản bạn chọn
Tiếp theo từ trang này về mô-đun
import os
# List the files in a directory
filenames = os.listdir[move_from]
print[filenames]
3, đây là cách di chuyển và đổi tên tệp trong PythonXác định các thư mục đầu vào và đầu ra nơi bạn muốn di chuyển các tệp của mình từ và đến
# Folder admin
move_from = 'Input Folder'
move_to = 'Output Folder'
Mặc dù các chuỗi có thể được sử dụng cho việc này [như đã được thực hiện ở trên], nhưng thay vào đó, tốt nhất là sử dụng các đối tượng đường dẫn
0
for file in *.old; do rm "$file" done
Không chỉ là thực tế là các đối tượng Đường dẫn có thể dễ dàng làm việc hơn, đó là nguyên tắc
Nói chung, bạn muốn các đối tượng là những gì họ đang có. số phải là int hoặc float, tên phải là chuỗi và đường dẫn tệp phải là đối tượng đường dẫn. Nó giúp đảm bảo rằng mã của bạn làm những gì bạn muốn và giúp bất kỳ ai đọc mã của bạn dễ dàng tìm ra những gì nó làm.
Chúng tôi có thể liệt kê các tệp trong thư mục đầu vào của mình bằng hàm
import os
# List the files in a directory
filenames = os.listdir[move_from]
print[filenames]
4import os
# List the files in a directory
filenames = os.listdir[move_from]
print[filenames]
3
for file in *.old; do rm "$file" done
Các tệp này sẽ được liệt kê theo thứ tự tùy ý. Sắp xếp chúng theo thứ tự bảng chữ cái bằng cách sử dụng hàm
import os
# List the files in a directory
filenames = os.listdir[move_from]
print[filenames]
5 để sắp xếp danh sách5
for file in *.old; do rm "$file" done
6
for file in *.old; do rm "$file" done
Nếu có một số tệp bạn muốn loại trừ khỏi bất kỳ công việc gì bạn đang làm, bạn có thể xóa chúng khỏi danh sách bằng phương pháp
import os
# List the files in a directory
filenames = os.listdir[move_from]
print[filenames]
6 [đừng nhầm với hàm import os
# List the files in a directory
filenames = os.listdir[move_from]
print[filenames]
7 dùng để xóa tệp]9
for file in *.old; do rm "$file" done
0
for file in *.old; do sed -i 's/replaceMe/replaceWith/g' $file done
Nếu bạn đang chạy tập lệnh của mình trong cùng thư mục với các tệp bạn muốn di chuyển/đổi tên, bạn sẽ thấy tên tập lệnh của mình có trong đầu ra của
import os
# List the files in a directory
filenames = os.listdir[move_from]
print[filenames]
4. Đây không phải là điều tốt - chúng tôi không muốn tập lệnh di chuyển và/hoặc tự đổi tên khi bạn đang chạy tập lệnh đó. Bạn có thể loại trừ nó theo cách thủ công bằng cách sử dụng import os
# List the files in a directory
filenames = os.listdir[move_from]
print[filenames]
9, nhưng tất nhiên, bạn sẽ cần thay đổi nó nếu bạn sao chép mã này vào một tệp khác. Một cách hiệu quả hơn để thực hiện việc này là tự động lấy tên của tập lệnh bằng cách sử dụng tham số 30. Tham số này [được gọi là “dunder file” - viết tắt của “double-underscore file”] được tạo tự động khi bạn chạy tập lệnh và chứa đường dẫn của nó
for file in *.old; do rm "$file" done
4
for file in *.old; do sed -i 's/replaceMe/replaceWith/g' $file done
5
for file in *.old; do sed -i 's/replaceMe/replaceWith/g' $file done
Tên tệp sau đó có thể được trích xuất bằng cách sử dụng
31
for file in *.old; do rm "$file" done
00
for file in *.old; do rm "$file" done
01
for file in *.old; do rm "$file" done
Điều này có thể được sử dụng kết hợp với
import os
# List the files in a directory
filenames = os.listdir[move_from]
print[filenames]
6. Tuy nhiên, nếu sau đó bạn sử dụng tập lệnh của mình với thư mục đầu vào không phải là thư mục hiện tại thì nó sẽ báo lỗi [vì hàm import os
# List the files in a directory
filenames = os.listdir[move_from]
print[filenames]
6 sẽ cố xóa tên tập lệnh của bạn khỏi danh sách do import os
# List the files in a directory
filenames = os.listdir[move_from]
print[filenames]
4 tạo nhưng sẽ không tìm thấy nó]. Để giải quyết vấn đề này và làm cho tập lệnh của bạn hoàn toàn mạnh mẽ, hãy làm cho tập lệnh có thể phát hiện lỗi này nếu phát sinh02
for file in *.old; do rm "$file" done
Python không thể được sử dụng để di chuyển tệp trực tiếp, nhưng nó có thể được sử dụng để chạy các lệnh hệ thống trong thiết bị đầu cuối/dòng lệnh. Một lệnh như vậy là
35 để di chuyển các tệp, do đó có thể được gọi cho các mục đích của chúng tôi
for file in *.old; do rm "$file" done
03
for file in *.old; do rm "$file" done
04
for file in *.old; do rm "$file" done
Điều này được thực hiện với chức năng
36. Tất nhiên, bạn có thể thay đổi tên tệp thành bất kỳ tên nào bạn muốn [miễn là bạn không sử dụng bất kỳ ký tự dành riêng nào của hệ thống tệp của mình] nhưng trong ví dụ này, tôi sẽ thay đổi tên tệp bằng cách nối thêm dấu thời gian từ khi chúng được sửa đổi lần cuối. Dấu thời gian này được cung cấp bởi hàm
for file in *.old; do rm "$file" done
37 [lấy thời gian đã sửa đổi] và là một số biểu thị thời gian tính bằng 'giây kể từ Kỷ nguyên'. Chúng tôi có thể chuyển đổi nó thành dấu thời gian mà con người có thể đọc được bằng cách sử dụng mô-đun
for file in *.old; do rm "$file" done
38
for file in *.old; do rm "$file" done
05
for file in *.old; do rm "$file" done
06
for file in *.old; do rm "$file" done
Đôi khi các chương trình sẽ tạo các phần mở rộng là vốn. Điều này không thực sự tạo ra sự khác biệt, nhưng đây là một số mã sẽ chuyển đổi các phần mở rộng trong danh sách tên tệp thành các chữ cái viết thường. Khi điều này được thực hiện [hoặc đồng thời], các tệp có thể được đổi tên