2014-01-29 23 views
0

所以我從URL轉換JSON數據轉換成字符串,然後將其寫入到一個文本文件中。這是我目前Python腳本(我使用Python 2.7.6):快速轉換JSON數據爲.txt文件的方式 - 蟒蛇2.7

import json 
import urllib 
import time 

startTime = time.time() 

url = "http://someurl..." 
success = False 

while (True): 
    try: 
     txt = urllib.urlopen(url).read() 
     print "  -> open URL time: %.3f" % (time.time() - startTime) 
     secondTime = time.time() 

     textFile = open('data.txt', 'w') 
     textFile.write("JSON Data (") 
     textFile.write(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")) 
     textFile.write("):\n") 
     textFile.write(txt) 
     textFile.close() 
     print "  -> write file time: %.3f" % (time.time() - secondTime) 
     thirdTime = time.time() 

     success = True 
     break 
    except ValueError as valueErr: 
     print "Error:", err 
    except IOError as ioError: 
     print "Error: Internet connection issues." 
     break 

if (success): 
    print " -> data.txt created()." 
    print " -> Finished." 
    print "  -> Total Elapsed Time = %.3f" % (time.time() - startTime), "seconds." 
else: 
    print " -> Finished." 

,輸出如下(我在Windows命令提示符,而不是Python提示符運行它):

'getCryptsyData.py' executing... 
     -> open URL time: 4.864 
    -> data.txt created(). 
     -> write file time: 0.005 
    -> Finished. 
     -> Total Elapsed Time = 4.939 seconds. 

我的問題是,有沒有更快的方式做到這一點?即用不同的python腳本或其他腳本語言或在C?

編輯1:更新的代碼,並輸出到當前腳本我運行。

+1

你有沒有考慮拋開'json.loads()'和'json.dumps()'而只是寫'jsonURL.read()'到文件? – jonrsharpe

+2

如何加入更多的elapsedTime語句?如果您在URL調用之後放置一個,並且在len()之後放一個,您可以看到時間花在哪裏。它可能會被用於等待外部URL。 –

+0

@AndrewEhrlich 打開URL需要4.864秒,WriteFile的花費0.005。有沒有什麼辦法可以在不改變任何與互聯網連接有關的情況下加快速度? – ChrisMcJava

回答

1

由於大部分時間都花在等待外部服務器響應,您可能無法通過更改代碼來獲取任何內容。根據代碼的使用方式,您可以通過以下方式改進整體體驗:

  • 如果可能再次請求相同的文件而沒有更改,請將它們緩存在本地。
  • 如果這些文件在另一臺服務器上可用,請找到離您較近的鏡像。
  • 如果文件的大小可預測,則可以讓另一個進程在一段時間內在本地複製文件。
+0

感謝您的回答和評論。 「這個答案很有用」(即upvoted) – ChrisMcJava

1

你從TXT加載JSON了。爲什麼不跳過這個,只是將響應txt寫入文件?

您的例子可以跳過JSON負載/突降,基本上重新寫爲:

txt = urllib.urlopen(url).read() 
with open('data.txt', 'w') as f: 
    f.write(txt) 

一些樣式提示:

  • 使用上下文管理器( 「與」 語句)寫入文件。
  • 用於計時代碼塊,請查看timeit模塊。
  • 按照pep8。您的camelCased var名稱傷害了我的眼睛:)