Cách tốt nhất trong Python để xử lý việc đọc một tệp có thể không tồn tại là gì?
Hiện tại tôi có những điều sau:
try:
with open[filename, "r"] as f:
return f.read[]
except IOError:
return False
Đây có phải là cách tốt nhất để làm điều đó hay điều này sai ở bất kỳ cấp độ nào?
Tôi đoán mối quan tâm lớn nhất của tôi là:
- Chỉ bắt được ngoại lệ chỉ để trả về sai
- Có lẽ tôi đang bỏ lỡ cách 'python' âm thầm thiếu lỗi cho một tệp bị thiếu
Martineau
Huy hiệu vàng 116K2525 gold badges160 silver badges285 bronze badges
Đã hỏi ngày 25 tháng 5 năm 2013 lúc 17:26May 25, 2013 at 17:26
Marty Wallacemarty WallaceMarty Wallace
32.4K53 Huy hiệu vàng134 Huy hiệu bạc198 Huy hiệu đồng53 gold badges134 silver badges198 bronze badges
2
Một
import os
if os.path.isfile['./file.txt']:
# do something with the file
7 / import os
if os.path.isfile['./file.txt']:
# do something with the file
8 thực sự là cách tốt nhất.
Jamylak
124K29 Huy hiệu vàng227 Huy hiệu bạc228 Huy hiệu Đồng29 gold badges227 silver badges228 bronze badges
Đã trả lời ngày 25 tháng 5 năm 2013 lúc 17:27May 25, 2013 at 17:27
Lennart Regebrolennart RegebroLennart Regebro
162K41 Huy hiệu vàng221 Huy hiệu bạc251 Huy hiệu Đồng41 gold badges221 silver badges251 bronze badges
6
import os
if os.path.isfile['./file.txt']:
# do something with the file
Đã trả lời ngày 29 tháng 4 năm 2019 lúc 15:54Apr 29, 2019 at 15:54
Một thử ngoại trừ khối sẽ bắt gặp lỗi, nhưng bạn có thể không muốn ngăn chặn lỗi.
Nếu bạn đang viết một hàm trả về nội dung được đọc từ tệp, thì nó sẽ khôn ngoan hơn với
import os
if os.path.isfile['./file.txt']:
# do something with the file
9 thay vì try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
0. Nói chung, đó là một ý tưởng tốt cho một chức năng chỉ trả về một loại. Cái gì đó như:try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
Thực sự có vẻ như bạn đang báo hiệu một điều kiện lỗi với sự trở lại. Nếu vậy, bạn thường tốt hơn khi chỉ để ngoại lệ truyền ra khỏi chức năng. Không phải là Pythonic khi sử dụng giá trị trả về để báo hiệu một điều kiện đặc biệt.
Đã trả lời ngày 25 tháng 5 năm 2013 lúc 17:43May 25, 2013 at 17:43
Ryan Hainingan HainingRyan Haining
33.9K12 Huy hiệu vàng106 Huy hiệu bạc167 Huy hiệu đồng12 gold badges106 silver badges167 bronze badges
2
Tóm tắt: Trong hướng dẫn này, bạn sẽ học cách kiểm tra xem một tệp có tồn tại không.: in this tutorial, you’ll learn how to check if a file exists.
Khi xử lý các tệp, bạn sẽ thường muốn kiểm tra xem một tệp có tồn tại trước khi làm việc khác với nó như đọc từ tệp hoặc ghi vào nó không.
Để thực hiện, bạn có thể sử dụng hàm
try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
1 từ mô -đun try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
2 hoặc phương thức try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
3 từ lớp try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
4 trong mô -đun try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
5.hàm os.path.exists []
Code language: JavaScript [javascript]
from os.path import exists file_exists = exists[path_to_file]
Phương thức path.is_file []
Code language: JavaScript [javascript]
from pathlib import Path path = Path[path_to_file] path.is_file[]
1] Sử dụng hàm os.path.exists [] để kiểm tra xem tệp có tồn tại
Để kiểm tra xem tệp có tồn tại không, bạn chuyển đường dẫn tệp đến hàm
try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
1 từ thư viện tiêu chuẩn try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
2.Đầu tiên, nhập thư viện tiêu chuẩn
try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
2:Code language: JavaScript [javascript]
import os.path
Thứ hai, hãy gọi hàm
try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
1:Code language: CSS [css]
os.path.exists[path_to_file]
Nếu tệp tồn tại, hàm
try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
1 trả về 1. Nếu không, nó trả vềCode language: JavaScript [javascript]
from os.path import exists file_exists = exists[path_to_file]
try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
0.Nếu tệp nằm trong cùng một thư mục với chương trình,
3 chỉ đơn giản là tên tệp.Code language: JavaScript [javascript]
from os.path import exists file_exists = exists[path_to_file]
Tuy nhiên, nó không phải là trường hợp, bạn cần vượt qua đường dẫn tệp đầy đủ của tệp. Ví dụ:
/path/to/filename
Ngay cả khi bạn chạy chương trình trên Windows, bạn nên sử dụng Slash phía trước [
4] để tách đường dẫn. Nó sẽ hoạt động trên các Windows, MacOS và Linux.Code language: JavaScript [javascript]
from os.path import exists file_exists = exists[path_to_file]
Ví dụ sau sử dụng hàm
try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
1 để kiểm tra xem tệp 6 có tồn tại trong cùng thư mục với chương trình không:Code language: JavaScript [javascript]
from os.path import exists file_exists = exists[path_to_file]
Code language: JavaScript [javascript]
import os.path file_exists = os.path.exists['readme.txt'] print[file_exists]
Nếu tệp
6 tồn tại, bạn sẽ thấy đầu ra sau:Code language: JavaScript [javascript]
from os.path import exists file_exists = exists[path_to_file]
Code language: PHP [php]
True
Nếu không, bạn sẽ thấy
try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
0 trên màn hình:import os
if os.path.isfile['./file.txt']:
# do something with the file
0Để thực hiện cuộc gọi đến hàm
try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
1 ngắn hơn và rõ ràng hơn, bạn có thể nhập chức năng đó và đổi tên thành hàm 0 như thế này:Code language: JavaScript [javascript]
from pathlib import Path path = Path[path_to_file] path.is_file[]
import os
if os.path.isfile['./file.txt']:
# do something with the file
12] Sử dụng mô -đun Pathlib để kiểm tra xem tệp có tồn tại không
Python đã giới thiệu mô -đun
try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
5 kể từ phiên bản 3.4.Mô-đun
try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
5 cho phép bạn thao tác các tệp và thư mục bằng cách sử dụng phương pháp hướng đối tượng. Nếu bạn không quen thuộc với lập trình hướng đối tượng, hãy xem phần Python OOP.Đầu tiên, nhập lớp
try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
4 từ mô -đun try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
5:import os
if os.path.isfile['./file.txt']:
# do something with the file
2Sau đó, khởi tạo một thể hiện mới của lớp
try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
4 và khởi tạo nó bằng đường dẫn tệp mà bạn muốn kiểm tra sự tồn tại:import os
if os.path.isfile['./file.txt']:
# do something with the file
3Cuối cùng, hãy kiểm tra xem tệp có tồn tại bằng phương pháp
try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
3 không:import os
if os.path.isfile['./file.txt']:
# do something with the file
4Nếu tệp không tồn tại, phương thức
try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
3 trả về try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
0. Nếu không, nó trả về 1.Code language: JavaScript [javascript]
from os.path import exists file_exists = exists[path_to_file]
Ví dụ sau đây cho thấy cách sử dụng lớp
try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
4 từ mô -đun try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
5 để kiểm tra xem tệp 6 có tồn tại trong cùng một thư mục của chương trình không:Code language: JavaScript [javascript]
from os.path import exists file_exists = exists[path_to_file]
import os
if os.path.isfile['./file.txt']:
# do something with the file
5Nếu tệp
6 tồn tại, bạn sẽ thấy đầu ra sau:Code language: JavaScript [javascript]
from os.path import exists file_exists = exists[path_to_file]
import os
if os.path.isfile['./file.txt']:
# do something with the file
6Nếu không, bạn sẽ thấy try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
0 trên màn hình:
try:
with open[filename] as f:
return f.read[]
except IOError:
return ''
- Để thực hiện cuộc gọi đến hàm
1 ngắn hơn và rõ ràng hơn, bạn có thể nhập chức năng đó và đổi tên thành hàmtry: with open[filename] as f: return f.read[] except IOError: return ''
0 như thế này:
Code language: JavaScript [javascript]from pathlib import Path path = Path[path_to_file] path.is_file[]
2] Sử dụng mô -đun Pathlib để kiểm tra xem tệp có tồn tại không