2012-08-30 48 views
24

Vì lý do nào đó, mã của tôi, đã từng hoạt động, hiện đang gặp sự cố khi mở tệp .yaml đơn giản. Tôi đã thử di chuyển xung quanh tập tin, cho mở() đường dẫn đầy đủ đến tập tin và không ai trong số nó có vẻ làm việc. Tôi thấy rằng câu hỏi này đã được hỏi một vài lần trước nhưng không thấy bất kỳ câu trả lời nào giải quyết được vấn đề.python open() method IOError: [Errno 2] Không có tập tin hoặc thư mục như vậy:

Bất kỳ lời khuyên nào về cách gọi tệp, nơi di chuyển tệp hoặc đề xuất các phương pháp khác để sử dụng sẽ được đánh giá rất nhiều!

def readYaml(): 
    file1 = open('recentlyUpdated.yaml') 
    print 'opened recently updated' 
    companyData = yaml.load(file1) 
    file1.close() 
    print 'read recentyl updated' 

    file2 = open('sortedLists.yaml') 
    sortedLists = yaml.load(file2) 
    file2.close() 

    return companyData, sortedLists 

lỗi là:

file1 = open('recentlyUpdated.yaml') 
IOError: [Errno 2] No such file or directory: 'recentlyUpdated.yaml' 

Đương nhiên tôi đã kiểm tra rằng đây là tên chính xác của tập tin.

Trả lời

26

Đảm bảo tệp tồn tại. Bạn có thể sau đó một trong hai:

  • Gọi os.chdir(dir), dir là thư mục mà tập tin được nằm, sau đó mở tập tin chỉ với tên gọi của nó như bạn đang làm gì.
  • Chỉ định đường dẫn tuyệt đối cho tệp trong cuộc gọi open của bạn.

Hãy nhớ sử dụng một chuỗi nguyên nếu con đường của bạn sử dụng gạch chéo ngược, như vậy: dir = r'C:\Python32'

Nếu bạn đi với phương pháp chdir, bạn có thể gọi os.listdir() để xem danh sách các tập tin trong thư mục làm việc hiện tại .

Hãy để tôi làm rõ cách python tìm tệp. Đường dẫn tuyệt đối là đường dẫn bắt đầu bằng thư mục gốc của máy tính của bạn, ví dụ: 'C: \ Python \ scripts ..' nếu bạn đang ở trên các cửa sổ. Đường dẫn tương đối là đường dẫn không bắt đầu bằng thư mục gốc của máy tính của bạn và thay vào đó liên quan đến một thứ gọi là working directory. Bạn có thể xem thư mục làm việc hiện tại của python bằng cách gọi os.getcwd().

Nếu bạn cố gắng làm open('sortedLists.yaml'), python sẽ thấy rằng bạn đang chuyển cho nó một đường dẫn tương đối, vì vậy nó sẽ tìm kiếm tệp bên trong thư mục làm việc hiện tại. Gọi số os.chdir sẽ thay đổi thư mục làm việc hiện tại.

Giả sử file.txt được tìm thấy trong `C: \ Folder '.

Để mở nó, bạn có thể làm:

os.chdir(r'C:\Folder') 
open('file.txt') #relative path, looks inside the current working directory 

hoặc

open(r'C:\Folder\file.txt') #full path 
+0

Khi sử dụng os.chdir (dir), tôi có phải đặt đường dẫn đến thư mục hoặc chỉ tên thư mục? Ngoài ra, một khi tôi nhận được tên của tập tin, tôi đặt nó trong mở() hoặc để tôi viết mở (os.chdir (dir))? – Santiago

+0

@Santiago Tôi đã làm rõ điều này trong câu trả lời của mình. – Lanaru

+1

+ 1 cho chuỗi thô r '' – WKordos

4

Các tập tin có thể được hiện nhưng có thể có một con đường khác. Hãy thử viết đường dẫn tuyệt đối cho tệp.

Thử dùng chức năng os.listdir() để kiểm tra xem con trăn ít nhất có thấy tệp hay không.

Hãy thử nó như:

file1 = open('Drive:\Dir\recentlyUpdated.yaml')

+1

dường như không thể nhận ra bất kỳ đường dẫn tệp nào trên máy tính của tôi. Có cách nào tôi có thể tìm kiếm một tập tin không? @sshekar – Santiago

+0

cảm ơn cho mẹo này. – Led

-1

run configuration need to be changed

thay đổi ... >>> đi để chạy cấu hình ... đi >>> Python chạy thấy tên mã của bạn bạn đang đi để chạy nếu nó sai, ...... xóa tên mã không cần thiết đó .... và sau đó chạy nó với các đối số thích hợp

+0

Không nơi nào trong câu hỏi này, Eclipse được sử dụng. – Nogoseke

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