2010-07-15 35 views
6

Tôi đang cố gắng để sao chép tập tin bên trong một kịch bản Python sử dụng đoạn mã sau:file sao chép với Python trong môi trường Windows

inf,outf = open(ifn,"r"), open(ofn,"w") 
outf.write(inf.read()) 
inf.close() 
outf.close() 

này hoạt động hoàn hảo unedr OSX (và hương vị UNIX khác tôi nghi ngờ) nhưng thất bại trong môi trường Windows. Về cơ bản, các cuộc gọi read() trả về byte ít hơn nhiều so với kích thước tập tin thực tế (đó là khoảng 10KB chiều dài) do đó gây ra việc cắt truncate các tập tin đầu ra. Mô tả phương thức read() nói rằng "Nếu đối số kích thước là âm hoặc bỏ qua, hãy đọc tất cả dữ liệu cho đến khi đạt được EOF" vì vậy tôi mong đợi mã trên làm việc trong bất kỳ môi trường nào, có Python che chắn mã của tôi Hệ điều hành quirks.

Vì vậy, điểm là gì? Bây giờ, tôi đã sử dụng shutil.copyfile, phù hợp với nhu cầu của tôi và nó hoạt động. Tôi đang sử dụng Python 2.6.5

Cảm ơn tất cả.

+1

Nếu đó là tệp nhị phân, bạn nên mở chúng bằng "rb" và "wb" vì điều này tạo sự khác biệt trên Windows. Tôi không chắc chắn nếu điều này có thể gây ra vấn đề này. –

+0

Tôi không hiểu ý anh là gì, Wayne. Tôi đã chấp nhận câu trả lời, câu trả lời của Nathon cụ thể hơn. –

Trả lời

3

shutil là cách tốt hơn để sao chép tệp, tuy nhiên bạn cần mở tệp nhị phân ở chế độ nhị phân trên Windows. Nó quan trọng ở đó. open(fname, 'rb')

+0

Tôi luôn luôn tự hỏi những gì trên trái đất bit nhị phân đã làm - Tôi đã sử dụng nó và không sử dụng nó và không bao giờ có thể cho biết một sự khác biệt. Và bây giờ tôi biết. –

+0

OMG! Đó là cờ nhị phân! Damn Win32 :) và xấu hổ với tôi! –

Các vấn đề liên quan