thể trùng lặp:
Dynamic module import in PythonNhập tập tin sử dụng chuỗi như tên
tôi có ý định làm một bộ các tập tin tại một thời điểm nào sớm, và cách tốt nhất để tổ chức nó là phải có một danh sách, danh sách đó sẽ ở trên cùng của một tập tin, và sau khi nó sẽ đến một số lượng vô lý của mã để xử lý những gì mà danh sách kiểm soát và cách nó hoạt động. Tôi đang tìm để viết danh sách nói chỉ một lần, và nói danh sách là danh sách các thư mục và tên tập tin ở định dạng này:
[(folder/filename, bool, bool, int), (folder/filename, bool, bool, int)]
Như bạn thấy, folder/filename
đều giống nhau (loại). Tên tệp là tên thư mục có số .py
khi kết thúc, nhưng nhập XXX, bạn không cần nhập XXX.py, vì vậy, tôi không thấy điều này gây ra sự cố.
Vấn đề tôi đang phải đối mặt là nhập khẩu sử dụng phương pháp này ...
for (testName, auto, hardware, bit) in testList:
print(testName)
paths = "\\" + testName
print paths
addpath(paths)
sys.modules[testName] = testName # One of a few options I've seen suggested on the net
print("Path Added")
test = testName + ".Helloworld()"
eval(test)
Vì vậy cho mỗi bài kiểm tra tôi có, in tên, lắp ráp một chuỗi chứa đường dẫn ("\\testName"
), ví dụ này , in đường dẫn kiểm tra, sau đó thêm đường dẫn vào danh sách (sys.path.append(path)
), sau đó in để xác nhận nó xảy ra, sau đó lắp ráp một chuỗi sẽ được thực hiện bởi eval
cho mô-đun chính thử nghiệm và cuối cùng đánh giá nó.
Như bạn có thể thấy, tôi hiện đang có danh sách hàng nhập ở trên cùng. Tôi không thể nhập đơn giản testName
(nội dung của testName
là tên của mô-đun mà tôi muốn nhập), vì nó sẽ cố gắng tìm một mô-đun có tên là testName
, không phải là mô-đun được gọi là nội dung của testName
.
Tôi đã xem một vài ví dụ về việc điều này đã được thực hiện ở đâu, nhưng không thể tìm thấy bất kỳ hoạt động nào trong hoàn cảnh của tôi. Nếu ai đó theo nghĩa đen có thể ném một đoạn mã mà nó sẽ là tuyệt vời.
Tôi cũng yêu cầu tôi không bị treo, rút hoặc không sử dụng eval, nó được sử dụng trong một môi trường được kiểm soát (danh sách mà chu kỳ của nó nằm trong tệp .py, vì vậy không " người dùng cuối "nên gây rối với nó).
Lưu ý rằng thụt đầu dòng là chính xác trong ST, đối với một số lý do tôi nghĩ rằng trang web này chỉ không thích phân tích cú pháp văn bản của tôi một cách chính xác :( – XtrmJosh
Không sử dụng các tab nhưng không gian cho indentation. –
Python đã có một chặng đường quản lý tập hợp lớn các tệp '.py' mà bạn có thể muốn nhập, để hiểu các thư mục và thư mục con, cho phép bạn xử lý việc nhập tương đối, thực hiện đặt tên đúng cách, v.v. Nó được gọi là [gói] (http: // docs. python.org/2/tutorial/modules.html#packages) Có lý do nào bạn không muốn sử dụng không? – katrielalex