2010-05-24 54 views

Trả lời

24

os.path.splitext(), os.rename()

ví dụ:

# renamee is the file getting renamed, pre is the part of file name before extension and ext is current extension 
pre, ext = os.path.splitext(renamee) 
os.rename(renamee, pre + new_extension) 
+0

Bạn có thể cụ thể hơn, tôi thấy tài liệu trước nhưng cũng không hiệu quả. – MysticCodes

+0

Sử dụng chức năng đầu tiên để lấy chân đế. Kết hợp nó với phần mở rộng mới và truyền tên tệp cũ và tên tệp mới cho hàm thứ hai. –

+6

Chỉnh sửa: 'os.rename (root, root + new_extension)' nên đọc 'os.rename (renamee, root + new_extension)' – mloskot

44
import os 
thisFile = "mysequence.fasta" 
base = os.path.splitext(thisFile)[0] 
os.rename(thisFile, base + ".aln") 

đâu thisFile = đường dẫn tuyệt đối của tập tin bạn đang thay đổi

+5

Tôi thích câu trả lời này nhiều hơn vì nó cung cấp một ví dụ và không chỉ trích dẫn các phương thức cần thiết để hoàn thành nhiệm vụ. Cảm ơn @FryDay – sadmicrowave

11

Sử dụng này:

os.path.splitext("name.fasta")[0]+".aln" 

Và đây là cách thức hoạt động trên:

Phương pháp splitext tách tên từ phần mở rộng tạo ra một tuple:

os.path.splitext("name.fasta") 

các tuple tạo bây giờ chứa các chuỗi "Tên" và "FASTA". Sau đó, bạn cần phải truy cập chỉ chuỗi "tên" đó là yếu tố đầu tiên của tuple:

os.path.splitext("name.fasta")[0] 

Và sau đó bạn muốn thêm tiện ích mới cho tên đó:

os.path.splitext("name.fasta")[0]+".aln" 
8

Bắt đầu từ Python 3.4 có pathlib thư viện cài sẵn. Vì vậy, các mã có thể là một cái gì đó như:

from pathlib import Path 

filename = "mysequence.fasta" 
new_filename = Path(filename).stem + ".aln" 

https://docs.python.org/3.4/library/pathlib.html#pathlib.PurePath.stem

Tôi yêu pathlib :)

+0

Đây là một thư viện nghiêm trọng! Cảm ơn! –

+0

Điều này thậm chí còn tốt hơn với cú pháp nội suy chuỗi python 3,6 (https://www.python.org/dev/peps/pep-0498/) 'new_filename = f" {Đường dẫn (tên tệp) .stem} .aln "' –

+0

Hãy cẩn thận - thân cây cũng cắt đường nếu có. Nếu bạn muốn đổi tên tập tin và nếu một đường dẫn được cung cấp (mà thừa nhận nó không có trong câu hỏi), kỹ thuật này sẽ thất bại. –

4

Một cách thanh lịch sử dụng pathlib.Path:

from pathlib import Path 
p = Path('mysequence.fasta') 
p.rename(p.with_suffix('.aln')) 
+0

Mặc dù OP không yêu cầu thực hiện đổi tên, nó nằm trong thẻ và nếu bạn định thực hiện đổi tên và nếu có thể đầu vào có thể có đường dẫn chứ không chỉ tên tệp, kỹ thuật này là đúng một. –

Các vấn đề liên quan