Python đóng tất cả các tệp đang mở

Chào Paul,

> 1. Trong ipython, tôi %run script. py, có vị trí nào đó  h =
> h5py. Tệp ('ra. h5', 'w')
> 2. Mã bị lỗi hoặc tôi làm gián đoạn mã bằng pdb ở đâu đó sau khi h
> được xác định.
> 3. tôi sửa đổi kịch bản. py và thực hiện lại %run.
> h5py phàn nàn. Lỗi IO. 'không thể tạo tệp (Khả năng truy cập tệp.
> Không thể mở tệp)' khi nó cố mở h để viết lại.

Tôi nghĩ bạn đã nghi ngờ, vấn đề là bạn đang cố mở
tệp hai lần. HDF5 thực sự cho phép điều này, mặc dù tôi không chắc đó
là một ý kiến ​​hay. Những gì nó không thể làm là mở tệp ở chế độ 'w' hai lần; . H5py, ít nhất là các phiên bản hiện đại, không
means "truncate the file and open it", which is impossible if the file
is already open. H5py, at least modern versions, does not
tự động đóng tệp cho bạn; .
intentional design decision related to the internal complexities of
HDF5.

Tôi sẽ đề nghị một trong những điều sau đây

1. Mở tệp ở chế độ 'a' hoặc 'r+', trong đó cho phép nhiều lần mở
. Tôi không chắc chính xác tác dụng của tính năng này đối với tính nhất quán của dữ liệu,
nhưng tôi nghi ngờ HDF5 thực hiện "điều đúng đắn" và trả lại cho bạn
tệp đã mở .
2. Đảm bảo rằng tệp đã được đóng, ngay cả khi KeyboardInterrupt hoặc
similar tắt. Bạn có thể làm điều này bằng cách sử dụng thử. cuối cùng hoặc bằng cách sử dụng
đối tượng Tệp làm trình quản lý bối cảnh.

với h5py. Tệp ('ra. hdf5','w') dưới dạng f.
# mã ở đây sử dụng f
# sau khi đóng tệp câu lệnh "with" bất kể ngoại lệ

HTH,
Andrew

Giả sử bạn đang làm việc trên một tệp được lưu trên máy tính cá nhân của mình. Nếu bạn muốn thực hiện bất kỳ thao tác nào trên tệp đó như mở tệp, cập nhật tệp hoặc bất kỳ thao tác nào khác trên tệp đó, tất cả các thao tác đó đều có trong Xử lý tệp. Vì vậy, Xử lý tệp trong khoa học máy tính có nghĩa là làm việc với các tệp được lưu trữ trên đĩa. Điều này bao gồm tạo, xóa, mở hoặc đóng tệp và viết, đọc hoặc sửa đổi dữ liệu được lưu trữ trong các tệp đó

Nhu cầu xử lý tệp là gì?

Trong khoa học máy tính, chúng tôi có các chương trình để thực hiện tất cả các loại nhiệm vụ. Một chương trình có thể yêu cầu đọc dữ liệu từ đĩa và lưu trữ kết quả trên đĩa để sử dụng trong tương lai. Đây là lý do tại sao chúng ta cần xử lý tệp. Chẳng hạn, nếu bạn cần phân tích, xử lý và lưu trữ dữ liệu từ một trang web, thì trước tiên bạn cần loại bỏ (điều này có nghĩa là lấy tất cả dữ liệu được hiển thị trên trang web như văn bản và hình ảnh) dữ liệu và lưu trữ trên đĩa của bạn, sau đó . Điều này được thực hiện bởi vì việc cạo dữ liệu từ một trang web mỗi khi bạn cần là điều không mong muốn vì sẽ mất rất nhiều thời gian

Mở và đóng tệp bằng Python

Trong xử lý tệp, chúng tôi có hai loại tệp, một là tệp văn bản và loại khác là tệp nhị phân. Chúng ta có thể mở tệp trong python bằng chức năng mở

hàm mở ()

Hàm này nhận hai đối số. Đầu tiên là tên tệp cùng với đường dẫn đầy đủ của nó và cái còn lại là chế độ truy cập. Hàm này trả về một đối tượng tệp

cú pháp

Điểm quan trọng

  • Tệp và tập lệnh python phải nằm trong cùng một thư mục. Khác, bạn cần cung cấp đường dẫn đầy đủ của tệp
  • Theo mặc định, chế độ truy cập là chế độ đọc nếu bạn không chỉ định bất kỳ chế độ nào. Tất cả các chế độ truy cập mở tệp được mô tả bên dưới

Chế độ truy cập cho biết loại hoạt động có thể có trong tệp đã mở. Có nhiều chế độ khác nhau để chúng ta có thể mở một tệp. Hãy xem chúng

Không có nối tiếp. Chế độMô tả1. rMở tệp ở chế độ chỉ đọc. Con trỏ tệp nằm ở đầu tệp. Đây cũng là chế độ mặc định. 2. rbGiống như chế độ r, ngoại trừ điều này sẽ mở tệp ở chế độ nhị phân. 3. r+Mở tệp để đọc và ghi. Con trỏ ở đầu tệp. 4. rb+Tương tự như chế độ r+, ngoại trừ điều này, mở tệp ở chế độ nhị phân. 5. wMở tệp để ghi. Ghi đè lên tệp hiện có và nếu tệp không có thì tạo tệp mới. 6. wbGiống như chế độ w, ngoại trừ điều này sẽ mở tệp ở định dạng nhị phân. 7. w+Mở tệp cho cả đọc và ghi, phần còn lại giống như chế độ w. 8. wb+Giống như w+ ngoại trừ điều này sẽ mở tệp ở định dạng nhị phân. 9. aMở tệp để nối thêm. Nếu có tệp thì con trỏ ở cuối tệp, ngược lại nó tạo tệp mới để ghi. 10. abGiống như một chế độ, ngoại trừ điều này sẽ mở tệp ở định dạng nhị phân. 11. a+Mở tệp để nối thêm và đọc. Con trỏ tệp nằm ở cuối tệp nếu tệp tồn tại, ngược lại nó tạo tệp mới để đọc và ghi. 12. ab+Giống như chế độ a+, ngoại trừ điều này, mở tệp ở định dạng nhị phân

Ví dụ về mở và đóng tệp trong Python

Mã số

# When the file is in the same folder where the python script is present. Also access mode is 'r' which is read mode.
file = open('test.txt',mode='r')

# When the file is not in the same folder where the python script is present. In this case, the whole path of the file should be written.
file = open('D:/data/test.txt',mode='r')

Thực tế chung là đóng tệp đã mở vì tệp đã đóng sẽ giảm nguy cơ bị đọc hoặc cập nhật không chính đáng. Chúng ta có thể đóng tệp trong python bằng hàm close. Hãy thảo luận về nó

chức năng đóng ()

Hàm này không nhận bất kỳ đối số nào và bạn có thể gọi trực tiếp hàm close() bằng đối tượng tệp. Nó có thể được gọi nhiều lần, nhưng nếu bất kỳ thao tác nào được thực hiện trên tệp đã đóng, một ngoại lệ "ValueError" sẽ xuất hiện

cú pháp

Bạn cũng có thể sử dụng câu lệnh 'with' với open, vì nó cung cấp khả năng xử lý ngoại lệ tốt hơn và đơn giản hóa nó bằng cách cung cấp một số tác vụ dọn dẹp. Ngoài ra, nó sẽ tự động đóng tệp và bạn không phải thực hiện thủ công

Ví dụ sử dụng câu lệnh with

Mã số

with open("test.txt", mode='r') as f:
   # perform file operations

Phương pháp hiển thị trong phần trên không hoàn toàn an toàn. Nếu một số ngoại lệ xảy ra trong khi mở tệp, thì mã sẽ thoát mà không đóng tệp. Một cách an toàn hơn là sử dụng khối lần thử cuối cùng trong khi mở tệp

Mã số

try:
    file = open('test.txt',mode='r')
    # Perform file handling operations
finally:
    file.close()

Bây giờ, điều này đảm bảo rằng tệp sẽ đóng ngay cả khi có ngoại lệ xảy ra khi mở tệp. Vì vậy, bạn có thể sử dụng phương thức câu lệnh 'with' để thay thế. Bất kỳ phương pháp nào trong hai phương pháp đều tốt

Bây giờ chúng ta sẽ xem các ví dụ về cách mở và đóng tệp trong python ở nhiều chế độ khác nhau. Dưới đây là một ví dụ về một vài chế độ nghỉ ngơi quan trọng mà bạn có thể tự mình thử

Python đóng tất cả các tệp đang mở

Bây giờ chúng ta sẽ thực hiện một số thao tác trên tệp và in nội dung của tệp sau mỗi thao tác để hiểu rõ hơn về cách thức hoạt động của nó. Ví dụ được đưa ra dưới đây. Cả tệp và tập lệnh python phải nằm trong cùng một thư mục

Mã số

# Opening file in read mode and printing the contents of the file.
with open("test.txt", mode='r') as f:
    data = f.readlines() #This reads all the lines from the file in a list.
    print(data) #This will print the content of the Hello World file!

# Opening a file in write mode.
with open("test.txt", mode='w') as f:
    f.write("Data after write operation")
# Opening file in read mode to check the contents.
with open("test.txt", mode='r') as f:
    data = f.readlines() # this reads all the lines from the file in a list.
    print(data) #this will print the overwritten content of the file that is       "Data after write operation"

# Opening a file in append mode and appending data to the file.
with open("test.txt", "a") as f:
    f.write(" Appending new data to the file")
# Opening file in read mode to check the contents.
with open("test.txt", mode='r') as f:
    data = f.readlines() #This reads all the lines from the file in a list.
    print(data) #this will print the existing content of file plus the appended content

Giải trình

Trong ví dụ trên, lúc đầu thử nghiệm. txt được mở ở chế độ đọc (r) để đọc nội dung của nó và dữ liệu tệp đó sẽ được in và sau đó tệp đó được mở bằng chế độ ghi (w) để nó ghi đè lên tất cả nội dung của tệp đó và dữ liệu mới sẽ được . Sau khi tệp đó được mở ở chế độ append(a), do đó, dữ liệu mới sẽ được thêm vào dữ liệu hiện có của tệp và sẽ không bị ghi đè

Có cần đóng tệp đang mở bằng Python không?

Bạn đã biết lý do tại sao việc đóng tệp trong Python lại quan trọng. Vì các tệp là tài nguyên hạn chế do hệ điều hành quản lý, nên việc đảm bảo các tệp được đóng sau khi sử dụng sẽ bảo vệ khỏi các sự cố khó gỡ lỗi như hết bộ xử lý tệp hoặc gặp phải dữ liệu bị hỏng

Hàm close() trả về trong Python là gì?

Mô tả. Trả về a Boolean cho biết tệp có bị đóng hay không .

Mở có tự động đóng Python không?

Sử dụng câu lệnh with open() sẽ tự động đóng tệp sau khi khối hoàn thành . Việc sử dụng trình quản lý ngữ cảnh không chỉ giúp bạn không phải nhớ đóng tệp theo cách thủ công mà còn giúp người khác đọc mã của bạn dễ dàng hơn để biết chính xác chương trình đang sử dụng tệp như thế nào.