2011-10-28 40 views
10

Hiện nay, tôi có đoạn mã sau ...Viết vào một thư mục mới bằng Python mà không thay đổi thư mục

file_name = content.split('=')[1].replace('"', '') #file, gotten previously 
fileName = "/" + self.feed + "/" + self.address + "/" + file_name #add folders 
output = open(file_name, 'wb') 
output.write(url.read()) 
output.close() 

Mục tiêu của tôi là phải có python ghi các file (dưới file_name) vào một tập tin trong "địa chỉ "thư mục trong thư mục" nguồn cấp dữ liệu "trong thư mục hiện tại (IE, nơi tập lệnh python được lưu)

Tôi đã xem mô-đun os, nhưng tôi không muốn thay đổi thư mục hiện tại và các thư mục này chưa tồn tại.

Trả lời

9

Thứ nhất, tôi không phải là 100% tự tin Tôi hiểu câu hỏi, vì vậy hãy để tôi nêu giả thuyết của tôi: 1) Bạn muốn viết thư cho một trong một thư mục chưa tồn tại. 2) Đường dẫn tương đối (với thư mục hiện tại). 3) Bạn không muốn thay đổi thư mục hiện tại.

Vì vậy, cho rằng: Kiểm tra hai chức năng sau: os.makedirs và os.path.join. Vì bạn muốn chỉ định đường dẫn tương đối (đối với thư mục hiện tại), bạn không muốn thêm "/" ban đầu.

dir_path = os.path.join(self.feed, self.address) # will return 'feed/address' 
os.makedirs(dir_path)        # create directory [current_path]/feed/address 
output = open(os.path.join(dir_path, file_name), 'wb') 
+0

os.makdirs (dir_path, exist_ok = True) sau đó sẽ không tăng OSError ngoại lệ nếu dir tồn tại. Mặc định là nâng cao OSError nếu thư mục tồn tại. – kaicarno

0

Các lệnh như os.mkdir không thực sự yêu cầu bạn tạo thư mục trong thư mục hiện tại của mình; bạn có thể đặt một đường dẫn tương đối hoặc tuyệt đối.

os.mkdir('../new_dir') 
os.mkdir('/home/you/Desktop/stuff') 

Tôi không biết cách nào để tạo đệ quy thư mục và mở tệp bên cạnh tự viết một hàm như vậy - đây là khoảng mã trong dòng. os.makedirs sẽ giúp bạn tận dụng tối đa cách đó; sử dụng các đối tượng tự bí ẩn tương tự như bạn đã không được hiển thị với chúng tôi:

dir = "/" + self.feed + "/" + self.address + "/" 
os.makedirs(dir) 
output = open(os.path.join(dir, file_name), 'wb') 
7

Điều này sẽ tạo ra các tập tin feed/address/file.txt trong cùng thư mục như kịch bản hiện nay:

import os 

file_name = 'file.txt' 
script_dir = os.path.dirname(os.path.abspath(__file__)) 
dest_dir = os.path.join(script_dir, 'feed', 'address') 
try: 
    os.makedirs(dest_dir) 
except OSError: 
    pass # already exists 
path = os.path.join(dest_dir, file_name) 
with open(path, 'wb') as stream: 
    stream.write('foo\n') 
Các vấn đề liên quan