2011-09-05 32 views
8

Tôi có các tệp mà tôi chỉ muốn 'foo' và 'bar' để tách khỏi.Tách tên tập tin bằng python

dn = "C:\\X\\Data\\" 

file

f= C:\\X\\Data\\foo.txt 
f= C:\\X\\Dats\\bar.txt 

Tôi đã thử f.split(".",1)[0]

Tôi nghĩ kể từ dn và .txt là được xác định trước tôi có thể trừ, nope. Split không hoạt động đối với tôi.

Trả lời

26

Cách sử dụng các phương thức xử lý đường dẫn thích hợp từ os.path?

>>> f = 'C:\\X\\Data\\foo.txt' 
>>> import os 
>>> os.path.basename(f) 
'foo.txt' 
>>> os.path.dirname(f) 
'C:\\X\\Data' 
>>> os.path.splitext(f) 
('C:\\X\\Data\\foo', '.txt') 
>>> os.path.splitext(os.path.basename(f)) 
('foo', '.txt') 
+0

More accuratly, 'os.path'. – Keith

+2

Chính xác hơn. – Martlark

1

Hai dòng này trả về một danh sách các tên tập tin mà không cần phần mở rộng:

import os 
[fname.rsplit('.', 1)[0] for fname in os.listdir("C:\\X\\Data\\")] 

Có vẻ như bạn đã bỏ qua một số mã. Từ những gì tôi có thể nói bạn đang cố gắng chia nhỏ nội dung của tệp.

Để khắc phục sự cố của bạn, bạn cần phải hoạt động trên danh sách các tệp trong thư mục. Đó là những gì os.listdir làm cho bạn. Tôi cũng đã thêm một phân chia phức tạp hơn. rsplit hoạt động từ bên phải và sẽ chỉ tách số . đầu tiên mà nó tìm thấy. Chú ý số 1 làm đối số thứ hai.

2

Để xử lý tên đường dẫn và tệp, tốt nhất bạn nên sử dụng mô-đun tích hợp os.path bằng Python. Vui lòng xem hàm dirname, basenamesplit trong mô-đun đó.

-1

một ví dụ khác:

f.split('\\')[-1].split('.')[0] 
Các vấn đề liên quan