Hướng dẫn python read file line by line and write back - python đọc từng dòng tệp và ghi lại
Tôi muốn đọc tệp đầu vào, từng dòng, sau đó sửa đổi một dòng và ghi lại các thay đổi thành cùng một tệp Show
Vấn đề là, sau khi viết lại, tôi mất trở lại dòng và tôi có tất cả dữ liệu trong một dòng
Đã hỏi ngày 30 tháng 1 năm 2019 lúc 17:41Jan 30, 2019 at 17:41
1 CHỈNH SỬA OK, những gì còn thiếu là vòng lặp.
Đã trả lời ngày 30 tháng 1 năm 2019 lúc 17:56Jan 30, 2019 at 17:56
ValentinovalentinoValentino 7.1616 Huy hiệu vàng18 Huy hiệu bạc33 Huy hiệu đồng6 gold badges18 silver badges33 bronze badges 0
. Tìm hiểu khoa học dữ liệu bằng cách hoàn thành các thách thức mã hóa tương tác và xem video của các giảng viên chuyên gia. Bắt đầu bây giờ! Cập nhật vào ngày 07 tháng 1 năm 2020 Trong bài đăng này, chúng tôi sẽ tìm hiểu cách đọc và ghi các tệp trong Python. Làm việc với các tệp bao gồm ba bước sau:
Hãy xem chi tiết xem từng bước một. Các loại tệp #Có hai loại tệp:
Một tệp văn bản chỉ đơn giản là một tệp lưu trữ các chuỗi ký tự bằng cách sử dụng mã hóa như UTF-8, Latin1, v.v., trong khi trong trường hợp dữ liệu tệp nhị phân được lưu trữ ở cùng định dạng như trong bộ nhớ máy tính. Dưới đây là một số ví dụ về văn bản và tệp nhị phân: Tệp văn bản: Mã nguồn Python, tệp HTML, tệp văn bản, tệp Markdown, v.v. Tệp nhị phân: tệp thực thi, hình ảnh, âm thanh, v.v. Điều quan trọng cần lưu ý là bên trong đĩa, cả hai loại tệp được lưu trữ dưới dạng chuỗi 1 và 0. Sự khác biệt duy nhất là khi một tệp văn bản được mở, dữ liệu được giải mã trở lại bằng cách sử dụng cùng một sơ đồ mã hóa, chúng được mã hóa. Tuy nhiên, trong trường hợp các tệp nhị phân không & nbsp; điều đó xảy ra. Mở hàm - open () hàm #Chức năng tích hợp The caged bird sings with a fearful trill of things unknown but longed for still6 được sử dụng để mở tệp. Cú pháp của nó như sau: open(filename, mode) -> file object Khi thành công, The caged bird sings with a fearful trill of things unknown but longed for still6 trả về một đối tượng tệp. Khi thất bại, nó tăng The caged bird sings with a fearful trill of things unknown but longed for still8 hoặc lớp con.
Sau đây là các giá trị có thể của chế độ.
Chúng tôi cũng có thể nối các 1 2 3 4 5 6 7 8 9 10 11 12 13 146 hoặc 1 2 3 4 5 6 7 8 9 10 11 12 13 147 vào chuỗi chế độ để cho biết loại tệp chúng tôi sẽ làm việc. 1 2 3 4 5 6 7 8 9 10 11 12 13 146 được sử dụng cho tệp văn bản và 1 2 3 4 5 6 7 8 9 10 11 12 13 147 cho các tệp nhị phân. Nếu không được chỉ định, 1 2 3 4 5 6 7 8 9 10 11 12 13 146 được giả định theo mặc định. 1 2 3 4 5 6 7 8 9 10 11 12 13 140 là tùy chọn, nếu không được chỉ định thì tệp sẽ được mở dưới dạng tệp văn bản để chỉ đọc. Điều này có nghĩa là ba cuộc gọi sau đây đến The caged bird sings with a fearful trill of things unknown but longed for still6 là tương đương:
Lưu ý rằng trước khi bạn có thể đọc một tệp, nó phải tồn tại, nếu không The caged bird sings with a fearful trill of things unknown but longed for still6 sẽ tăng ngoại lệ >>> >>> f = open("poem.txt", "r") >>> >>> f.read(3) # read the first 3 characters 'The' >>> >>> f.read() # read the remaining characters in the file. ' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n' >>> >>> f.read() # End of the file (EOF) is reached '' >>> >>> f.close() >>>4. Tuy nhiên, nếu bạn mở một tệp để viết (sử dụng chế độ như 1 2 3 4 5 6 7 8 9 10 11 12 13 142, 1 2 3 4 5 6 7 8 9 10 11 12 13 143 hoặc 1 2 3 4 5 6 7 8 9 10 11 12 13 144), Python sẽ tự động tạo tệp cho bạn. Nếu tệp đã tồn tại thì nội dung của nó sẽ bị xóa. Nếu bạn muốn ngăn chặn việc mở tệp ở chế độ 1 2 3 4 5 6 7 8 9 10 11 12 13 145. Đóng phương thức tệp - đóng () #Khi bạn hoàn thành làm việc với tệp, bạn nên đóng nó. Mặc dù, tệp được tự động đóng khi chương trình kết thúc nhưng nó vẫn là một thực tế tốt để làm điều đó một cách rõ ràng. Không đóng tệp trong một chương trình lớn có thể có vấn đề và thậm chí có thể khiến chương trình gặp sự cố. Để đóng tệp, hãy gọi phương thức >>> >>> f = open("poem.txt", "r") >>> >>> f.read(3) # read the first 3 characters 'The' >>> >>> f.read() # read the remaining characters in the file. ' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n' >>> >>> f.read() # End of the file (EOF) is reached '' >>> >>> f.close() >>>9 của đối tượng tệp. Đóng tệp giải phóng các tài nguyên liên quan đến nó và xóa dữ liệu trong bộ đệm vào đĩa. Con trỏ tệp #Khi bạn mở một tệp thông qua phương thức The caged bird sings with a fearful trill of things unknown but longed for still6. Hệ điều hành liên kết một con trỏ trỏ đến một ký tự trong tệp. Con trỏ tệp xác định từ nơi hoạt động đọc và ghi sẽ diễn ra. Ban đầu, con trỏ tệp chỉ vào đầu tệp và tiến bộ khi chúng tôi đọc và ghi dữ liệu vào tệp. Sau đó trong bài đăng này, chúng ta sẽ xem cách xác định vị trí hiện tại của con trỏ tệp và sử dụng nó để truy cập ngẫu nhiên các phần của tệp. Đọc các tệp bằng cách đọc (), readline () và readlines () #Để đọc dữ liệu, đối tượng tệp cung cấp các phương thức sau:
Khi kết thúc của tệp (EOF) đạt được các phương thức 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 236 và 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 234 trả về một chuỗi trống, trong khi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 235 trả về một danh sách trống ( 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 239). Dưới đây là một số ví dụ: poem.txt
Ví dụ 1: Sử dụng 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 236
Ví dụ 2: Sử dụng 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 234
Ví dụ 3: Sử dụng 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 235
Đọc tệp trong các đoạn #Các phương thức 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 236 (không có đối số) và 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 235 đọc tất cả dữ liệu vào bộ nhớ cùng một lúc. Vì vậy, đừng sử dụng chúng để đọc các tệp lớn. Một cách tiếp cận tốt hơn là đọc tệp trong các đoạn bằng cách sử dụng 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 236 hoặc đọc từng dòng tệp bằng cách sử dụng 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 234, như sau: Ví dụ: Đọc tệp trong các khối: Reading file in chunks
Ví dụ: Đọc dòng tệp từng dòng: Reading file line by line
Thay vì sử dụng các phương thức 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 236 (với đối số) hoặc 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 234, bạn cũng có thể sử dụng đối tượng tệp để lặp lại nội dung của tệp một dòng tại một thời điểm.
Mã này tương đương với ví dụ trước nhưng nó ngắn gọn hơn, dễ đọc và dễ gõ hơn. cảnh báo: Coi chừng phương pháp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 234, & nbsp; Nếu bạn gặp bất hạnh khi mở một tệp lớn mà không có bất kỳ dòng mới nào thì 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 234 không tốt hơn 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 236 (không có đối số). Điều tương tự cũng đúng khi bạn sử dụng đối tượng tệp làm trình lặp. Viết dữ liệu bằng Write () và WriteLines () #Để viết dữ liệu, đối tượng tệp cung cấp hai phương thức sau:
Đọc và trả về các ký tự cho đến khi kết thúc dòng được đạt được dưới dạng chuỗi.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 235
Đọc và trả về tất cả các dòng như một danh sách các chuỗi.
Dưới đây là một ví dụ về phương pháp 00.
Phương thức 00 bên trong gọi phương thức >>> >>> f = open("poem.txt", "r") >>> >>> f.readlines() ['The caged bird sings\n', 'with a fearful trill\n', 'of things unknown\n', 'but longed for still\n'] >>> >>> f.readlines() # EOF reached [] >>> >>> f.close() >>>7.
Dưới đây là một ví dụ khác mở tập tin ở chế độ phụ lục.
Giả sử tệp 03 rất quan trọng để sử dụng và chúng tôi không muốn nó bị ghi đè. Để ngăn chặn việc mở tệp ở chế độ 1 2 3 4 5 6 7 8 9 10 11 12 13 145
Chế độ 1 2 3 4 5 6 7 8 9 10 11 12 13 145 chỉ mở tệp để viết, nếu nó không tồn tại. Bộ đệm và Flushing #Bộ đệm là quá trình lưu trữ dữ liệu tạm thời trước khi nó được chuyển đến một vị trí mới. Trong trường hợp của các tệp, dữ liệu không được ghi ngay lập tức vào đĩa thay vào đó nó được lưu trữ trong bộ nhớ bộ đệm. Lý do này đằng sau việc làm điều này là dữ liệu ghi vào đĩa cần có thời gian trái ngược với việc ghi dữ liệu vào bộ nhớ vật lý. Hãy tưởng tượng một chương trình viết dữ liệu mỗi khi phương thức >>> >>> f = open("poem.txt", "r") >>> >>> f.readlines() ['The caged bird sings\n', 'with a fearful trill\n', 'of things unknown\n', 'but longed for still\n'] >>> >>> f.readlines() # EOF reached [] >>> >>> f.close() >>>7 được gọi. Một chương trình như vậy sẽ rất chậm. Khi chúng tôi sử dụng bộ đệm, dữ liệu chỉ được ghi vào đĩa khi bộ đệm trở nên đầy hoặc khi phương thức >>> >>> f = open("poem.txt", "r") >>> >>> f.read(3) # read the first 3 characters 'The' >>> >>> f.read() # read the remaining characters in the file. ' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n' >>> >>> f.read() # End of the file (EOF) is reached '' >>> >>> f.close() >>>9 được gọi. Quá trình này được gọi là Flushing đầu ra. Bạn cũng có thể xóa đầu ra bằng cách sử dụng phương thức 08 của đối tượng tệp. Lưu ý rằng 08 chỉ lưu dữ liệu được đệm vào đĩa. Nó không đóng tệp.Phương thức The caged bird sings with a fearful trill of things unknown but longed for still6 cung cấp một đối số thứ ba tùy chọn để kiểm soát bộ đệm. Để tìm hiểu thêm về nó, hãy truy cập tài liệu chính thức. Đọc và viết dữ liệu nhị phân #Đọc và viết tệp nhị phân được thực hiện bằng cách nối 1 2 3 4 5 6 7 8 9 10 11 12 13 147 vào chuỗi chế độ. Trong Python 3, dữ liệu nhị phân được biểu thị bằng cách sử dụng một loại đặc biệt gọi là 12.Loại 12 đại diện cho một chuỗi số số bất biến trong khoảng từ 0 đến 255.Hãy tạo một phiên bản nhị phân của bài thơ bằng cách đọc tệp 14.
Lưu ý rằng việc lập chỉ mục một đối tượng 12 trả về 16.Hãy viết bài thơ nhị phân của chúng tôi trong một tập tin mới.
Bài thơ nhị phân của chúng tôi hiện được viết vào tập tin. Để đọc nó, hãy mở tệp ở chế độ 17.
Điều quan trọng cần lưu ý là, trong trường hợp của chúng tôi, dữ liệu nhị phân có chứa các ký tự có thể in, như bảng chữ cái, Newline, v.v. Tuy nhiên, đây sẽ không phải là trường hợp hầu hết thời gian. Điều đó có nghĩa là với dữ liệu nhị phân, chúng ta không thể sử dụng một cách đáng tin cậy 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 234 và đối tượng tệp (làm trình lặp) để đọc nội dung của tệp vì có thể không phải là ký tự dòng mới trong tệp. Cách tốt nhất để đọc dữ liệu nhị phân là đọc nó bằng các khối bằng phương pháp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 236.
Truy cập ngẫu nhiên bằng FSEEK () và FTELL () #Trước đó trong bài đăng này, chúng tôi đã học được rằng khi tệp được mở, hệ thống liên kết một con trỏ với nó, xác định vị trí từ nơi đọc hoặc viết sẽ diễn ra. Cho đến nay chúng tôi đã đọc và ghi các tập tin tuyến tính. Nhưng cũng có thể đọc và viết tại các vị trí cụ thể. Để đạt được điều này, đối tượng tệp cung cấp hai phương pháp sau:
Hãy lấy một số ví dụ ngay bây giờ.
Sau khi đọc 5 ký tự, con trỏ tệp hiện đang ở ký tự 1 2 3 4 5 6 7 8 9 10 11 12 13 143 (trong Word 30). Vì vậy, hoạt động đọc (hoặc viết) tiếp theo sẽ bắt đầu từ thời điểm này.
Bây giờ chúng tôi đã đến cuối tập tin. Tại thời điểm này, chúng ta có thể sử dụng phương thức 31 để tua lại con trỏ tệp đến đầu tệp, như sau:
Con trỏ tệp hiện đang ở đầu tệp. Tất cả các hoạt động đọc và viết từ bây giờ trở đi & nbsp; sẽ diễn ra từ đầu tệp một lần nữa.
Để di chuyển con trỏ tệp từ 12 byte về phía trước từ vị trí hiện tại, hãy gọi 32 như sau:
Con trỏ tệp hiện đang ở ký tự 1 2 3 4 5 6 7 8 9 10 11 12 13 143 (sau từ 34), vì vậy hoạt động đọc và ghi sẽ diễn ra từ đó.
Chúng ta cũng có thể di chuyển con trỏ tệp ngược. Ví dụ: cuộc gọi sau đến 32 di chuyển con trỏ tệp 13 byte ngược từ vị trí hiện tại.
Giả sử chúng tôi muốn đọc 16 byte cuối cùng của tệp. Để làm như vậy, hãy di chuyển con trỏ tệp 16 byte lùi so với cuối tệp.
Các giá trị của đối số 24 của 31 cũng được định nghĩa là hằng số trong mô -đun 38.
với câu lệnh #Tuyên bố với cho phép chúng tôi tự động đóng tệp sau khi chúng tôi hoàn thành làm việc với nó.Cú pháp của nó như sau:
Các câu lệnh bên trong câu lệnh 34 phải được thụt vào như nhau giống như vòng lặp, nếu không 46 ngoại lệ sẽ được nêu ra.Đây là một ví dụ:
Hướng dẫn khác (Nhà tài trợ) Trang web này được hỗ trợ rộng rãi bởi DataCamp.DataCamp cung cấp các hướng dẫn Python tương tác trực tuyến cho khoa học dữ liệu.Tham gia hơn một triệu người học khác và bắt đầu học Python cho khoa học dữ liệu ngay hôm nay! |