Lỗi không tìm thấy file trong python

Vì lý do nào đó, mã của tôi gặp sự cố khi mở một tệp đơn giản:

Đây là mã:

file1 = open['recentlyUpdated.yaml']

Và lỗi là:

IOError: [Errno 2] No such file or directory: 'recentlyUpdated.yaml'
  • Tự nhiên tôi đã kiểm tra xem đây có phải là tên chính xác của tệp hay không.
  • Tôi đã thử di chuyển xung quanh tệp, cung cấp open[]đường dẫn đầy đủ đến tệp và dường như không có đường dẫn nào hoạt động.

  • python
  • file
  • file-io
  • filenotfoundexception
  • file-not-found

83 hữu ích 2 bình luận 455k xem chia sẻ

answer

105

  • Đảm bảo tệp tồn tại: sử dụng os.listdir[]để xem danh sách tệp trong thư mục làm việc hiện tại
  • Đảm bảo rằng bạn đang ở trong thư mục mà bạn nghĩ rằng bạn đang ở trong đó os.getcwd[][nếu bạn khởi chạy mã của mình từ IDE, bạn cũng có thể đang ở trong một thư mục khác]
  • Sau đó, bạn có thể:
    • Gọi os.chdir[dir], dirlà thư mục chứa tệp, sau đó mở tệp chỉ với tên của nó giống như bạn đang làm.
    • Chỉ định một đường dẫn tuyệt đối đến tệp trong opencuộc gọi của bạn .
  • Hãy nhớ sử dụng một chuỗi thô nếu đường dẫn của bạn sử dụng dấu gạch chéo ngược, như sau: dir = r'C:\Python32'
    • Nếu bạn không sử dụng raw-string, bạn phải thoát khỏi mọi dấu gạch chéo ngược: 'C:\\User\\Bob\\...'
    • Dấu gạch chéo chuyển tiếp cũng hoạt động trên Windows 'C:/Python32'và không cần phải thoát.

Hãy để tôi làm rõ cách Python tìm tệp:

  • Một đường dẫn tuyệt đối là một con đường mà bắt đầu với thư mục gốc của máy tính của bạn, ví dụ 'C: \ Python \ script ..' nếu bạn đang ở trên Windows.
  • Một đường dẫn tương đối là một đường dẫn không bắt đầu với thư mục gốc của máy tính của bạn và thay vào đó là liên quan đến một cái gì đó được 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 thực hiện 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 điện os.chdirsẽ thay đổi danh bạ làm việc hiện tại.

Ví dụ: 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 là

open[r'C:\Folder\file.txt'] #full path

105 hữu ích 5 bình luận chia sẻ

answer

18

Rất có thể, vấn đề là bạn đang sử dụng đường dẫn tệp tương đối để mở tệp, nhưng thư mục làm việc hiện tại không được đặt như bạn nghĩ.

Đó là một quan niệm sai lầm phổ biến rằng các đường dẫn tương đối có liên quan đến vị trí của tập lệnh python, nhưng điều này là sai sự thật. Đường dẫn tệp tương đối luôn liên quan đến thư mục làm việc hiện tại và thư mục làm việc hiện tại không nhất thiết phải là vị trí của tập lệnh python của bạn.

Bạn có ba lựa chọn:

  • Sử dụng một đường dẫn tuyệt đối để mở tệp:

    file = open[r'C:\path\to\your\file.yaml']
    
  • Tạo đường dẫn đến tệp liên quan đến tập lệnh python của bạn:

    from pathlib import Path
    
    script_location = Path[__file__].absolute[].parent
    file_location = script_location / 'file.yaml'
    file = file_location.open[]
    

    [Xem thêm: Làm cách nào để lấy đường dẫn và tên của tệp hiện đang thực thi? ]

  • Thay đổi thư mục làm việc hiện tại trước khi mở tệp:

    import os
    
    os.chdir[r'C:\path\to\your\file']
    file = open['file.yaml']
    

Các lỗi phổ biến khác có thể gây ra lỗi "không tìm thấy tệp" bao gồm:

  • Vô tình sử dụng trình tự thoát trong đường dẫn tệp:

    path = 'C:\Users\newton\file.yaml'
    # Incorrect! The '\n' in 'Users\newton' is a line break character!
    

    Để tránh mắc lỗi này, hãy nhớ sử dụng các ký tự chuỗi thô cho đường dẫn tệp:

    path = r'C:\Users\newton\file.yaml'
    # Correct!
    

    [Xem thêm: Đường dẫn Windows bằng Python ]

  • Quên rằng Windows không hiển thị phần mở rộng tệp:

    Vì Windows không hiển thị các phần mở rộng tệp đã biết, đôi khi bạn nghĩ rằng tệp của mình được đặt tên file.yaml, nhưng nó thực sự được đặt tên file.yaml.yaml. Kiểm tra kỹ phần mở rộng tệp của bạn.

18 hữu ích 0 bình luận chia sẻ

answer

6

Tệp có thể tồn tại nhưng có thể có một đường dẫn khác. Hãy thử viết đường dẫn tuyệt đối cho tệp.

Hãy thử os.listdir[]chức năng để kiểm tra xem ít nhất python có nhìn thấy tệp hay không.

Hãy thử nó như thế này:

file1 = open[r'Drive:\Dir\recentlyUpdated.yaml']

6 hữu ích 1 bình luận chia sẻ

answer

2

Có thể, bạn đã đóng 'file1'.
Chỉ cần sử dụng cờ 'w' để tạo tệp mới:

file1 = open['recentlyUpdated.yaml', 'w']

mode là một chuỗi tùy chọn chỉ định chế độ mà tệp được mở. Nó được mặc định là 'r' có nghĩa là mở để đọc ở chế độ văn bản. Các giá trị phổ biến khác là 'w' để ghi [cắt bớt tệp nếu nó đã tồn tại] ...

[xem thêm //docs.python.org/3/library/functions.html?highlight=open#open ]

2 hữu ích 0 bình luận chia sẻ

answer

1

Nếu là VSCode, hãy xem vùng làm việc. Nếu bạn đang ở trong không gian làm việc khác, lỗi này có thể tăng lên

1 hữu ích 1 bình luận chia sẻ

Đăng nhập để trả lời câu hỏi

Có thể bạn quan tâm

Chủ Đề