2

次のコードを使用して、テキストファイルをDropboxにアップロードしようとしています。

def uploadFile(file):
    f = open('logs/%s.txt' % file)
    response = client.put_file('/%s.txt' % file, f)
    print "Uploaded log file %s" % file

ドロップボックスへの接続は完全に正常に機能します。ファイルをアップロードしたときに、このエラーが発生します。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\dropbox_python_sdk-1.5.1-py2.7.egg\dropbox
\client.py", line 352, in put_file
    return self.rest_client.PUT(url, file_obj, headers)
  File "C:\Python27\lib\site-packages\dropbox_python_sdk-1.5.1-py2.7.egg\dropbox
\rest.py", line 265, in PUT
    return cls.IMPL.PUT(*n, **kw)
  File "C:\Python27\lib\site-packages\dropbox_python_sdk-1.5.1-py2.7.egg\dropbox
\rest.py", line 211, in PUT
    return self.request("PUT", url, body=body, headers=headers, raw_response=raw
_response)
  File "C:\Python27\lib\site-packages\dropbox_python_sdk-1.5.1-py2.7.egg\dropbox
\rest.py", line 174, in request
    raise util.AnalyzeFileObjBug(clen, bytes_read)
dropbox.util.AnalyzeFileObjBug:
Expected file object to have 18 bytes, instead we read 17 bytes.
File size detection may have failed (see dropbox.util.AnalyzeFileObj)

グーグルは私にこれについて助けを与えてくれませんでした。

4

1 に答える 1

8

あなたは改行統一の犠牲者のようですね。ファイルオブジェクトは18バイト("abcdefghijklmnop\r\n")のファイルサイズを報告しますが、読み取りは17バイト("abcdefghijklmnop\n")のみです。

これを回避するには、ファイルをバイナリモードで開きます。

f = open('logs/%s.txt' % file, 'rb')

デフォルトでは、テキストモードを使用します。このモードでは'\n'、書き込み時に文字をプラットフォーム固有の表現に変換し、読み取り時に文字を戻すことができます。

于 2013-01-23T19:14:26.657 に答える