Nếu bạn không cần nó để được người có thể đọc/chỉnh sửa, giải pháp đơn giản nhất là chỉ cần sử dụng pickle
.
Để viết:
with open(the_filename, 'wb') as f:
pickle.dump(my_list, f)
Để đọc:
with open(the_filename, 'rb') as f:
my_list = pickle.load(f)
Nếu bạn làm cần họ là con người có thể đọc được, chúng ta cần biết thêm thông tin.
Nếu my_list
là đảm bảo được một danh sách các chuỗi không có newlines nhúng, chỉ cần viết chúng trên mỗi dòng:
with open(the_filename, 'w') as f:
for s in my_list:
f.write(s + '\n')
with open(the_filename, 'r') as f:
my_list = [line.rstrip('\n') for line in f]
Nếu họ chuỗi Unicode chứ không phải là chuỗi byte, bạn sẽ muốn encode
chúng. (Hoặc, tệ hơn, nếu chúng là chuỗi byte, nhưng không nhất thiết phải có cùng mã hóa như mặc định của hệ thống.)
Nếu chúng có thể có dòng mới hoặc ký tự không thể in, v.v., bạn có thể sử dụng thoát hoặc trích dẫn . Python có nhiều loại khác nhau của thoát được xây dựng vào stdlib.
Hãy sử dụng unicode-escape
đây để giải quyết cả hai vấn đề trên cùng một lúc:
with open(the_filename, 'w') as f:
for s in my_list:
f.write((s + u'\n').encode('unicode-escape'))
with open(the_filename, 'r') as f:
my_list = [line.decode('unicode-escape').rstrip(u'\n') for line in f]
Bạn cũng có thể sử dụng giải pháp 3.x kiểu trong 2.x, với một trong hai mô-đun hoặc codecs
các io
module: *
import io
with io.open(the_filename, 'w', encoding='unicode-escape') as f:
f.writelines(line + u'\n' for line in my_list)
with open(the_filename, 'r') as f:
my_list = [line.rstrip(u'\n') for line in f]
* TOOWTDI, vì vậy đó là một cách rõ ràng? Nó phụ thuộc ... Đối với phiên bản ngắn: nếu bạn cần làm việc với các phiên bản Python trước 2.6, hãy sử dụng codecs
; nếu không, hãy sử dụng io
.
Tôi thích thư viện dưa, đó là khá ngọt ngào và hoạt động hoàn hảo.Tôi đã thực hiện nó và nó có vẻ là làm việc được. Cảm ơn bạn, tôi sẽ đánh dấu bạn là dấu chọn màu xanh lá cây ngay khi nó cho phép tôi. – Ryflex
unicode-escape ... Tôi phải mở nó là 'wb' vì TypeError: phải là str, không phải byte – rluks
@ Pan.student: Bạn đang sử dụng Python 3.x, phải không? Trong Python 2, câu hỏi này được đặt ra là gì, 'str' và' bytes' là cùng loại, và sự khác biệt giữa các tệp nhị phân và tệp văn bản chỉ là bản dịch mới. Trong Python 3, 'str' và' unicode' là cùng loại, và sự khác biệt giữa các tệp nhị phân và tệp văn bản là các tệp văn bản tự động mã hóa và giải mã cho bạn. (Bạn có thể nhận được hành vi 3.x nếu 2.x nếu bạn cẩn thận, bao gồm các tệp văn bản kiểu 3.x với 'io.open', nhưng người hỏi đã không làm điều đó.) – abarnert