当我使用Python和urlib2从我的服务器下载文件时,文件内容与应有的略有不同。
它们的不同之处在于,在文件的下载版本中添加了额外的行(“\ r \ n”或“\ n”)。这对于xml格式的文件来说不是一个主要问题,但是当我的文件被加密时这是一个主要问题,因为文件内容略有不同而且无法解密。
我知道我的下载代码改变了文件内容而不是服务器上的文件错误,因为我已经使用FTP下载了该文件,并且当我以这种方式下载时发现它具有正确的内容。一些更有用的信息:文件是ASCII编码的。我的服务器是Windows .NET,我不确定http响应是ascii还是unicode - 也许这可能导致问题?
如何让urlib2从我的服务器下载我的文件并确保内容不会改变?
原创内容:
<clientlist>
<client>
<clientauthblah>blah</clientauthblah>
<version9>blah</version9>
<version10>blah</version10>
<companyno>1</companyno>
<companyname>blah</companyname>
</client>
当我运行下载代码时,这是我得到的内容,这是我无法获得的,因为我的文件已加密,这意味着我无法解密文件:
<clientlist>
<client>
<clientauthblah>blah</clientauthblah>
<version9>blah</version9>
<version10>blah</version10>
<companyno>1</companyno>
<companyname>blah</companyname>
</client>
继承我的代码:
# Download
response = urllib2.urlopen("http://www.mywebsite.com/Clients.xml")
output = open("tempEncrypted.xml",'w')
res = response.read()
output.write(res)
output.close()
答案 0 :(得分:1)
这里的问题是这一行:
output = open("tempEncrypted.xml",'w')
默认情况下,Python以文本模式打开文件,这意味着您可能会获得换行符。平台差异,通用换行等等使细节变得复杂。
但如果您有二进制数据,答案很简单:使用'wb'
代替'w'
以二进制模式打开它:
output = open("tempEncrypted.xml",'wb')