2012-02-03 43 views
5

Sau khi đọc một số bài đăng, có vẻ như bạn có thể mở một tệp để đọc và ghi với chế độ 'r +' hoặc 'w +'. Tuy nhiên, cố gắng sử dụng các chế độ này luôn luôn cho tôi kết quả kỳ lạ:python open ('file', 'r +') cho kết quả lạ

  1. Nếu tôi sử dụng 'r +', gọi file.read(), và sau đó gọi file.write ('str'), sẽ có lỗi của lỗi "IOError: [Errno 0]"
  2. Nếu tôi sử dụng 'r +', hãy gọi tệp.write ('str'), sau đó gọi tệp.read(), nó sẽ trả về không mong đợi và rất dài nội dung (trông giống như bên của một số đối tượng)
  3. Nếu tôi sử dụng 'w +', kêu gọi file.read() sẽ trả về chuỗi rỗng

Điều tôi đang cố làm là mở một tệp, đọc nội dung, sửa đổi và ghi lại. Hiện tại tôi đang mở nó bằng 'r', thay đổi nội dung và mở lại bằng 'w' và viết lại. Đây có phải là cách hay để làm điều đó không?

Có một ví dụ tại http://snipt.org/zglJ0

Tôi đang sử dụng cửa sổ 7 và python 2.7.2

+3

Bạn có thể chia sẻ đoạn mã thể hiện sự cố không? –

+0

Ba thử nghiệm ở trên đều được đóng bởi file.close(). Tuy nhiên, có vẻ như làm cả read() và write() trong cùng một thí nghiệm (không gọi hàm close() ở giữa) sẽ dẫn đến kết quả lạ. –

+0

Đây có phải là trên cả hai cửa sổ và linux? – tMC

Trả lời

5

Bạn phải flush() khi chuyển đổi giữa đọc và viết một tập tin đó là được mở trong một bản cập nhật chế độ. Hoặc tôi nghĩ bạn cũng có thể seek(). Điều này là do một số hành vi lạ trong việc thực thi tệp Windows trong Python 2.x; họ đã sửa nó trong 3.x.

+0

Hi Kindall! Cảm ơn câu trả lời, nhưng phương pháp tuôn ra dường như không hoạt động (Có tôi đang sử dụng Windows và python 2.7.2). mã của tôi như sau: '>>> f = open (' f1.txt ~ ',' r + ') >>> f.read() ' blablabl ' >>> f.flush() >> > f.write ('aaa') Traceback (gần đây nhất gọi cuối cùng): file "", dòng 1, trong f.write ('aaa') IOError: [Errno 0] Lỗi >> > f.close() ' –

+1

Bạn có thể thử 'f.seek (0, 1)' rồi (tìm vị trí hiện tại trong tập tin). – kindall

+0

Điều đó có hiệu quả! Trong trường hợp này, có vẻ dễ đọc hơn khi đóng và mở lại cho mỗi hành động khác nhau. –