2011-11-30 42 views
5

Tôi đang sử dụng phiên bản python mới nhất và sau khi tìm kiếm, tôi dường như không thể tìm thấy bất kỳ thứ gì trên dưa chua sẽ làm việc cho tôi.Cú pháp chọn cú pháp Python

Tôi chỉ đơn giản thực hiện các hướng dẫn cố gắng tìm hiểu về tẩy và không có mã nguồn nào hoạt động trên các hướng dẫn sẽ làm việc cho tôi, tôi nghi ngờ đây là điều cần làm với các hướng dẫn đã lỗi thời.

Những gì tôi đã cố gắng và cũng giống như những gì hướng dẫn chương trình là:

import pickle 
lists = [1,2,3,4,5] 
pickle.dump(lists, open('log.txt', 'a+')) 

mà mang lại cho tôi những lỗi sau:

Traceback (most recent call last): 
File "<pyshell#2>", line 1, in <module> 
pickle.dump(lists, open('log.txt', 'a+')) 
TypeError: must be str, not bytes 

này

>>> import pickle 
>>> unpicklefile = open('log.txt', 'r') 
>>> unpickledlist = [1,2,3,4,5] 
>>> unpickledlist = pickle.load(unpicklefile) 

mang lại cho tôi lỗi sau:

Traceback (most recent call last): 
File "<pyshell#3>", line 1, in <module> 
unpickledlist = pickle.load(unpicklefile) 
TypeError: 'str' does not support the buffer interface 

Cảm ơn bạn đã trả lời và trợ giúp

+0

Mã của bạn hoạt động tốt cho tôi không có lỗi (ngoại trừ việc phù hợp với tên tập tin được sử dụng). Vì vậy, ** những gì bạn đã thực sự nhận được lỗi **? –

+0

đã chỉnh sửa câu hỏi –

+0

Có vẻ như bạn đang theo dõi hướng dẫn được thiết kế cho Python 2.x, trong khi bạn có vẻ thực sự đang sử dụng Python 3.x. Có những khác biệt tinh tế, và nếu bạn muốn sử dụng Python 3.x thì tốt nhất là nên làm theo một hướng dẫn được thiết kế cho phiên bản đó. –

Trả lời

2

Chế độ 'a+' có thể gây ra sự cố. Và, nếu bạn đang sử dụng Windows, sẽ hữu ích khi mở tệp ở chế độ nhị phân. Ngoài ra, bạn nên đóng tệp trước khi mở lại để đọc lại. Và đảm bảo bạn đang viết và đọc cùng một tệp ('log.txt' so với 'filename'):

import pickle 
lists = [1,2,3,4,5] 

f = open('tmp_pickle.pic', 'wb') 
pickle.dump(lists, f) 
f.close() 

f = open('tmp_pickle.pic', 'rb') 
unpickledlist = pickle.load(f) 
print unpickledlist 
+0

Điều này dường như làm việc cho tôi vì vậy bạn có thể đúng về vấn đề là vì tôi đang sử dụng 'a +'. Cảm ơn bạn đã giúp đỡ :) –

+0

Câu trả lời này giải quyết vấn đề vì mở tệp bằng chế độ ''b'' (trong Python 3.x) dự kiến' byte' từ người viết thay vì 'str' (là một mã Unicode chưa được mã hóa chuỗi). Mô-đun 'pickle' hy vọng có thể ghi' byte', xem [tài liệu 'pickle.dump'] (http://docs.python.org/py3k/library/pickle.html#pickle.dump) để biết chi tiết ("Đối số * tệp * phải có phương thức write() chấp nhận đối số byte đơn.") –