Biết cách viết các phần tử của danh sách vào một tệp trong Python có thể hữu ích. Trong hướng dẫn này, bạn sẽ thấy cách thực hiện điều đó theo nhiều cách
Một cách tiếp cận phổ biến để ghi các phần tử của danh sách vào tệp bằng Python là trước tiên lặp qua các phần tử của danh sách bằng vòng lặp for. Sau đó, sử dụng một đối tượng tệp để ghi mọi phần tử của danh sách vào một tệp như một phần của mỗi lần lặp lại vòng lặp. Đối tượng tệp cần được mở ở chế độ ghi
Có nhiều tình huống trong đó việc ghi các mục của danh sách vào một tệp có thể hữu ích
Hãy xem xét một ví dụ
Mục lục
- Cách lưu trữ các thành phần của danh sách Python trong một tệp
- Bạn gặp lỗi gì khi ghi vào tệp được mở ở chế độ đọc?
- Viết một danh sách vào một tệp bằng câu lệnh With Open
- Viết một danh sách vào một tệp bằng phương pháp nối chuỗi
- Viết danh sách Python vào tệp bằng cách sử dụng Writelines
- Cách ghi danh sách vào tệp bằng Python Lambda
- Sự kết luận
Cách lưu trữ các thành phần của danh sách Python trong một tệp
Hãy tưởng tượng bạn đang xây dựng một ứng dụng cần duy trì danh sách các mục sau khi thực thi
Điều này có thể được yêu cầu, ví dụ: nếu mỗi lần bạn chạy ứng dụng, bạn lưu trữ dữ liệu trong một tệp và dữ liệu đó có thể được đọc và sử dụng trong lần chạy ứng dụng tiếp theo của bạn
Hãy cùng xem cách bạn có thể lấy danh sách các chuỗi bên dưới và lưu trữ từng chuỗi trong một tệp bằng Python
months = ['January', 'February', 'March', 'April']Chúng tôi sẽ mở một đối tượng tệp ở chế độ ghi và sau đó sử dụng vòng lặp for để ghi từng phần tử vào tệp
output_file = open('months.txt', 'w') for month in months: output_file.write(month) output_file.close()Sử dụng hàm tích hợp Python open(), chúng tôi mở một tệp mới ở chế độ ghi. Mỗi lần lặp của vòng lặp for ghi một tháng vào tệp
Sau đó, chúng tôi đóng đối tượng tệp sau khi chúng tôi đã ghi tất cả các phần tử trong danh sách vào nó
Bây giờ, hãy xem nội dung của tệp trông như thế nào bằng cách sử dụng lệnh cat
$ cat months.txt JanuaryFebruaryMarchAprilCó vẻ như chúng ta đang thiếu các ký tự dòng mới ở cuối mỗi dòng, hãy thêm nó vào phương thức ghi trong mỗi lần lặp của vòng lặp for
output_file = open('months.txt', 'w') for month in months: output_file.write(month + '\n') output_file.close()Đầu ra bây giờ trông tốt hơn rất nhiều
$ cat months.txt January February March AprilBạn gặp lỗi gì khi ghi vào tệp được mở ở chế độ đọc?
Tôi muốn xem điều gì sẽ xảy ra nếu chúng tôi không mở tệp một cách rõ ràng ở chế độ ghi
Thay thế dòng sau trong mã Python của bạn
output_file = open('months.txt', 'w')Với những điều sau đây…
…lưu ý rằng chúng ta đã loại bỏ tham số thứ hai được truyền cho hàm open() yêu cầu hàm mở tệp ở chế độ ghi
output_file = open('months.txt')Đây là lỗi chúng tôi gặp phải khi chạy mã nếu chúng tôi không xóa các tháng. txt được tạo trong ví dụ trước
$ python write_list_to_file.py Traceback (most recent call last): File "write_list_to_file.py", line 6, in output_file.write(month + '\n') IOError: File not open for writingLỗi cho chúng tôi biết rằng tệp chưa được mở để ghi. Không truyền tham số thứ hai cho hàm open(), chúng tôi đã mở tệp của mình ở chế độ đọc
Nếu bạn xóa các tháng. txt và chạy lại chương trình, bạn sẽ gặp một lỗi khác
________số 8Trình thông dịch Python cố mở tệp ở chế độ đọc nhưng xem xét rằng tệp không tồn tại, chúng tôi nhận được lỗi "Không có tệp hoặc thư mục như vậy"
Viết một danh sách vào một tệp bằng câu lệnh With Open
Thay vì nhớ đóng đối tượng tệp sau khi kết thúc vòng lặp for, chúng ta có thể sử dụng câu lệnh Python with open
Điều này tạo ra một trình quản lý bối cảnh tự động đóng đối tượng tệp khi chúng ta không cần nó nữa
Đây là cách mã Python của chúng ta trở thành…
months = ['January', 'February', 'March', 'April'] with open('months.txt', 'w') as output_file: for month in months: output_file.write(month + '\n')Ngắn gọn hơn rất nhiều
Thực hiện nó và xác nhận rằng mọi phần tử trong danh sách được ghi vào tệp như mong đợi
Viết một danh sách vào một tệp bằng phương pháp nối chuỗi
Tôi tự hỏi liệu tôi có thể thay thế vòng lặp for bằng một dòng duy nhất sử dụng phương thức string join() không
Phương thức nối chuỗi nối các phần tử của một chuỗi thành một chuỗi duy nhất trong đó mọi phần tử được phân tách khỏi phần tử khác bằng chuỗi mà phương thức nối được áp dụng cho
Có lẽ việc hiển thị nó trong trình bao Python sẽ dễ dàng hơn 🙂
output_file = open('months.txt', 'w') for month in months: output_file.write(month) output_file.close()0Tôi đã sử dụng ký tự # trong ví dụ này vì theo cách này, sẽ dễ dàng hơn để xem cách sử dụng ký tự # để phân tách các phần tử trong danh sách
Lưu ý rằng ký tự phân tách # không xuất hiện sau phần tử cuối cùng
Vì vậy, đây là kết quả nếu chúng ta sử dụng phương pháp này trong chương trình của mình và thay thế ký tự # bằng ký tự dòng mới
output_file = open('months.txt', 'w') for month in months: output_file.write(month) output_file.close()1Kết quả là
output_file = open('months.txt', 'w') for month in months: output_file.write(month) output_file.close()2Đồng đô la ở cuối dòng cuối cùng là bản thân vỏ vì ký tự dòng mới không có ở cuối dòng cuối cùng
Vì vậy, loại phương thức này hoạt động nhưng nó không tốt bằng vòng lặp for vì nó không thêm một ký tự dòng mới vào dòng cuối cùng của tệp
Viết danh sách Python vào tệp bằng cách sử dụng Writelines
Đối tượng tệp Python cung cấp một phương thức gọi là writelines() ghi một chuỗi các chuỗi vào một tệp
Tôi cảm thấy đó có thể là một cách hay khác để làm điều này, hãy thử xem
output_file = open('months.txt', 'w') for month in months: output_file.write(month) output_file.close()3Đây là đầu ra khi tôi chạy chương trình
output_file = open('months.txt', 'w') for month in months: output_file.write(month) output_file.close()4Hmmm…điều này có vẻ không ổn
Phương thức writelines() không thêm bất kỳ dấu phân cách dòng nào
Tôi tự hỏi tại sao?. ?
Những gì chúng ta có thể làm là thêm ký tự dòng mới sau mỗi phần tử trong danh sách và sau đó chuyển danh sách sang phương thức writelines
Hãy sử dụng cách hiểu danh sách để làm điều đó
output_file = open('months.txt', 'w') for month in months: output_file.write(month) output_file.close()5Bạn có thể thấy rằng chúng ta cũng đang sử dụng phương thức string format() để thêm ký tự dòng mới vào cuối mỗi chuỗi trong danh sách
Đầu ra chúng tôi nhận được có vẻ tốt
output_file = open('months.txt', 'w') for month in months: output_file.write(month) output_file.close()6Cách ghi danh sách vào tệp bằng Python Lambda
Cách tiếp cận cuối cùng mà chúng ta sẽ sử dụng để ghi các chuỗi trong danh sách của mình vào một tệp cũng sẽ sử dụng hàm lambda và hàm bản đồ
Việc sử dụng lambdas không thực sự cần thiết, chúng tôi đang thực hiện nó trong hướng dẫn này như một bài tập để làm mới các khái niệm Python nâng cao hơn
Dưới đây bạn có thể xem cú pháp của chức năng bản đồ
output_file = open('months.txt', 'w') for month in months: output_file.write(month) output_file.close()7Hàm map áp dụng hàm được truyền dưới dạng tham số đầu tiên cho mọi mục của iterable. Trong trường hợp này, hàm sẽ là hàm lambda nối thêm ký tự dòng mới vào một chuỗi đã cho và ghi kết quả vào một đối tượng tệp
Chúng tôi sẽ sử dụng điều này như một cách tiếp cận chung để viết mọi mục trong danh sách theo sau là một dòng mới vào tệp đầu ra
Đây là chức năng lambda để sử dụng
output_file = open('months.txt', 'w') for month in months: output_file.write(month) output_file.close()8Và bây giờ hãy chuyển lambda cho hàm map
output_file = open('months.txt', 'w') for month in months: output_file.write(month) output_file.close()9Hãy xác nhận xem đầu ra có đúng không…
output_file = open('months.txt', 'w') for month in months: output_file.write(month) output_file.close()6Vâng, đúng vậy
Sự kết luận
Chúng tôi đã thấy rất nhiều cách tiếp cận khác nhau để ghi các phần tử của danh sách Python vào một tệp
Đây là một bài tập tốt để thực hành nhiều cách giải quyết cùng một vấn đề trong Python
Hãy cho tôi biết trong phần bình luận, bạn thích cái nào hơn?
Bài viết liên quan
Tìm giá trị tối thiểu và tối đa trong từ điển Python [Từng bước]
5 cách sao chép danh sách trong Python. Hãy Khám Phá Chúng
Python có phải là ngôn ngữ kịch bản không?
Claudio Sabato
Tôi là Trưởng nhóm công nghệ, Kỹ sư phần mềm và Huấn luyện viên lập trình. Tôi muốn giúp bạn trong hành trình trở thành Super Developer