我試圖從soap API使用Python中的流式響應,並輸出一個CSV文件。響應輸出一個以64爲底的字符串,我不知道該怎麼辦。此外,api文檔還說,必須將響應讀取到逐個緩衝區的目標緩衝區。將Python解碼流爲CSV Byte(從C#代碼翻譯)
下面是C#代碼是由API的文檔提供:
byte[] buffer = new byte[4000];
bool endOfStream = false;
int bytesRead = 0;
using (FileStream localFileStream = new FileStream(destinationPath, FileMode.Create, FileAccess.Write))
{
using (Stream remoteStream = client.DownloadFile(jobId))
{
while (!endOfStream)
{
bytesRead = remoteStream.Read(buffer, 0, buffer.Length);
if (bytesRead > 0)
{
localFileStream.Write(buffer, 0, bytesRead);
totalBytes += bytesRead;
}
else
{
endOfStream = true;
}
}
}
}
我已經嘗試了許多不同的事情來得到這個流爲可讀的CSV文件,但非工作過。
with open('test.csv', 'w') as f: f.write(FileString)
返回與BASE64字符串CSV分佈在多個線路
這裏是我的最新嘗試:
with open('csvfile13.csv', 'wb') as csvfile:
FileString = client.service.DownloadFile(yyy.JobId, False)
stream = io.BytesIO(str(FileString))
with open(stream,"rt",4000) as readstream:
csvfile.write(readstream)
這會產生錯誤:
TypeError: coercing to Unicode: need string or buffer, _io.BytesIO
任何幫助不勝感激,即使它只是指向正確的方向。即使我沒有完全解決問題,我也會確保把獎勵分給誰最有幫助的人!
我也問過類似這樣的一些問題,但我還沒有找到工作的完全的答案: What is the Python equivalent to FileStream in C#?
Write Streamed Response(file-like object) to CSV file Byte by Byte in Python
How to replicate C# 'byte' and 'Write' in Python
讓我知道如果你需要進一步澄清!
更新: 我試圖print(base64.b64decode(str(FileString)))
這給了我一整頁webdings像
]�P�O�J��Y��KW �
我也曾嘗試
for data in client.service.DownloadFile(yyy.JobId, False):
print data
但這只是通過輸出字符循環通過像任何其他字符串characater。
我也設法通過整個字符串解碼像\命苦\ x97_D \ xfb的(而不是實際的字節,只是類似的格式)的字節長的字符串,但我不知道如何使之可讀。
編輯:糾正樣品蟒蛇的輸出,增加了更多的示例代碼,格式化
什麼is'type(FileString)''中= FileString client.service.DownloadFile(yyy.JobId,FALSE)'? ??另外,你使用的是什麼版本的Python 2? –
class'suds.sax.text.Text' – jvk777
我正在使用Python 2.7.12 | Anaconda 4.2.0 – jvk777