2013-07-27 50 views
17

Tôi chỉ là một newbie trong python, vì vậy xin lỗi vì câu hỏi noobishTại sao os.path.isfile trả về Sai?

>>> import os 
>>> os.listdir("/home/user/Desktop/1") 
['1.txt', '2', '3.txt'] 
>>> os.path.isfile("/home/user/Desktop/1/1.txt") 
True 
>>> for i in os.listdir("/home/user/Desktop/1"): 
...  print(os.path.isfile(i)) 
... 
False 
False 
False 
>>> 

hai trong số họ được file thì tại sao sản lượng là False khi nó phải được đúng không?

Trả lời

22

Khi bạn in os.path.isfile(i), bạn đang kiểm tra xem "1.txt" hoặc "2" hoặc "3.txt" có phải là tệp hay không, trong khi bạn chạy os.path.isfile("/home/user/Desktop/1/1.txt") bạn có đường dẫn đầy đủ đến tệp.

Hãy thử thay thế dòng đó với

print(os.path.isfile("/home/user/desktop/1/" + i)) 

Edit:

Như đã đề cập trong các bình luận bên dưới bởi icktoofay, một giải pháp tốt hơn có thể là để thay thế cho phù hợp với

print(os.path.isfile(os.path.join("/home/user/desktop/1", i))) 

hoặc để lưu trữ trước đó "/ home/user/desktop/1" vào một số biến x, cho phép thay thế dòng bằng

print(os.path.isfile(os.path.join(x,i))) 
+2

Nếu tên thư mục và tên tập tin là trong các biến, 'os.path. join' sẽ cho phép bạn tránh mã hóa cứng một '/' giữa chúng. – icktoofay

2

Sự cố xảy ra với CWD của bạn (Danh mục làm việc hiện tại) vì os.listdir() cung cấp cho bạn các tệp có liên quan đến đường dẫn được cung cấp và không phù hợp với CWD. Giải pháp là để thiết lập CWD của bạn trước khi sử dụng os.listidr():

dir_to_delete = '/home/user/Desktop/1' 

os.chdir(dir_to_delete) 

[f for f in os.listdir() if os.path.isfile(f)] 

hoặc chỉ sửa chữa đường dẫn đến tập tin:

[f for f in os.listdir(dir_to_delete) if os.path.isfile(os.path.join(dir_to_delete, f))] 
Các vấn đề liên quan