2011-08-23 33 views
5

Tôi có một số mã bổ sung từ "_manual" vào cuối tải tên tệp .. Tôi cần thay đổi tập lệnh để xóa hai ký tự cuối cùng của tên tệp (ES) và sau đó thay thế nó bằng _ES_Manual ví dụ: AC-5400ES.txt -> AC-5400_ES_manual.txtThay thế các tên tệp bằng python

Làm cách nào để kết hợp hàm đó vào mã này?

folder = r"C:/Documents and Settings/DuffA/Bureaublad/test" 
import os # glob is unnecessary 
for root, dirs, filenames in os.walk(folder): 
    for filename in filenames: 
     fullpath = os.path.join(root, filename) 
     filename_split = os.path.splitext(fullpath) # filename and extensionname (extension in [1]) 
     filename_zero, fileext = filename_split 
     print fullpath, filename_zero + "_manual" + fileext 
     os.rename(fullpath, filename_zero + "_manual" + fileext) 
+1

Bạn có nghĩa là EN hoặc ES không? – carlpett

+0

sự cố với tập lệnh hiện tại là gì ??? – rocksportrocker

+0

tôi có nghĩa là ES xin lỗi! Không có vấn đề với kịch bản - nhưng tôi cần phải kết hợp thay thế ES hiện tại trong tên tập tin vào nó! xin lỗi nếu điều đó gây nhầm lẫn! –

Trả lời

10

Hãy thử điều này:

import os 
pathiter = (os.path.join(root, filename) 
    for root, _, filenames in os.walk(folder) 
    for filename in filenames 
) 
for path in pathiter: 
    newname = path.replace('ES.txt', '_ES_manual.txt') 
    if newname != path: 
     os.rename(path,newname) 
+0

điều này cũng hoạt động như một sự quyến rũ! - làm cách nào để tôi chọn câu trả lời nếu cả hai đều hoạt động? –

+0

tôi sẽ chấp nhận điều này vì nó đặc biệt nhắm mục tiêu đến các tệp ES! cảm ơn bạn! Mã số –

+0

@Alice Duff _hughdbrown_ chỉ áp dụng cho tên tệp kết thúc bằng 'ES.txt'. Nó là chính xác nếu bạn muốn thay đổi chỉ những tên tập tin. Mã của tôi là chung chung hơn, nó thay đổi tất cả các tên tập tin tại 2 chữ cái cuối cùng của họ trước khi mở rộng.Nó có thể xảy ra rằng nó không phải là những gì bạn muốn, vì vậy bạn có thể upvote _hughdbrown_. Nhưng bạn cũng có thể cân nhắc thêm điều kiện trong mã của tôi để chọn tên tệp để thay đổi, do đó mã của tôi tổng quát hơn và dễ thích nghi hơn. Bạn phải cân nhắc và lựa chọn. – eyquem

1

bạn có thể làm:

for filename in filenames: 
    print(filename) #should display AC-5400ES.txt 
    filename = filename.replace("ES.txt","ES_manual.txt") 
    print(filename) #should display AC-5400ES_manual.txt 
    fullpath = os.path.join(root, filename) 
    os.rename(fullpath, filename) 
+0

Nhưng tôi cần giữ lại phần bắt đầu của tên tập tin "AC-5400ES" - điều này có hiệu quả không? –

+0

@Alice Duff: vâng, tuyên bố này sẽ lấy chuỗi tên tệp và thay thế mọi lần xuất hiện của "ES.txt" và thay thế bằng "ES_manual.txt". Đây là cách cơ bản nhất để xử lý những gì bạn mô tả. Nếu bạn cần một cái gì đó tinh vi hơn, xin vui lòng cho chúng tôi biết những gì bạn chính xác muốn :) – JMax

+0

hmm .. tôi đã thử điều này và tất cả mọi thứ chỉ ở chính xác như nhau! –

3
for root, dirs, filenames in os.walk(folder): 
    to_write = ['root == %s\n' % root] 

    for filename in filenames: 
     filename_zero, fileext = os.path.splitext(filename) 
     newname = "%s_%s_manual%s" % (filename_zero[:-2],filename_zero[-2:],fileext) 

     tu = (os.path.join(root, filename), os.path.join(root, newname)) 

     to_write.append('%s --> %s\n' % tu) 
     os.rename(*tu) 

    print '\n'.join(to_write) 
+0

hoạt động như một sự quyến rũ! –

+0

@Alice Duff Thật quyến rũ con rắn! Nhân tiện, tôi sử dụng đối tượng ** to_write ** để trì hoãn việc in theo khối, do đó việc thực hiện chung nhanh hơn – eyquem

+0

ok cảm ơn cho mẹo! –

5

Đối với một mất tổng quát hơn về câu trả lời của hughdbrown. Mã này có thể được sử dụng để xóa bất kỳ ký tự hoặc tập ký tự cụ thể nào.

import os 

paths = (os.path.join(root, filename) 
     for root, _, filenames in os.walk('C:\FolderName') 
     for filename in filenames) 

for path in paths: 
    # the '#' in the example below will be replaced by the '-' in the filenames in the directory 
    newname = path.replace('#', '-') 
    if newname != path: 
     os.rename(path, newname) 
Các vấn đề liên quan