試試這個例子,並與您的要求
import csv
import operator as op
import requests
symbol = "mtgoxUSD"
url = 'http://api.bitcoincharts.com/v1/trades.csv?symbol={}'.format(symbol)
csv_file = "trades_{}.csv".format(symbol)
data = requests.get(url)
with open(csv_file, "w") as f:
f.write(data.text)
with open(csv_file) as f:
next(f) # discard first row from file -- see notes
max_value = max(row[0] for row in csv.reader(f))
with open(csv_file) as f:
next(f) # discard first row from file -- see notes
max_row = max(csv.reader(f), key=op.itemgetter(0))
註釋說明:
MAX()可以直接使用迭代器,並csv.reader()爲我們提供了一個迭代器,所以我們可以通過它。我假設你可能需要扔掉一個標題行,所以我展示瞭如何做到這一點。如果您有多個標題行放棄,則可能需要使用itertools模塊中的islice()。
在第一個中,我們使用「生成器表達式」從每一行中選擇一個值,並找到最大值。這與「列表理解」非常相似,但它並不構成一個完整的列表,它只是讓我們遍歷結果值。然後max()消耗迭代,我們得到最大值。
max()可以使用key = argument指定一個「key function」。它將使用鍵函數來獲取值並使用該值來計算最大值...但由max()返回的值將是未修改的原始值(在此情況下是CSV中的行值)。在這種情況下,關鍵函數是由operator.itemgetter()爲您製作的,您將傳遞到您想要的列,然後operator.itemgetter()爲您獲取該列的函數。
產生的作用是等價的:
def get_col_0(row):
return row[0]
max_row = max(csv.reader(f), key=get_col_0)
或者,人們會用拉姆達此:
max_row = max(csv.reader(f), key=lambda row: row[0])
但我認爲operator.itemgetter()便利和漂亮的閱讀。而且速度很快。
我表示將數據保存在一個文件中,然後再從文件中拉出。如果您想在不保存數據的情況下瀏覽數據,則只需通過行迭代即可。 也許類似於:
text = data.text
rows = [line.split(',') for line in text.split("\n") if line]
rows.pop(0) # get rid of first row from data
max_value = max(row[0] for row in rows)
max_row = max(rows, key=op.itemgetter(0))
非常感謝!我感謝它的幫助 – Andre
如果您不介意,還有一件事情,如果我需要比較超過2個excels/csv文件,該代碼是否也可以工作?再次感謝! – Andre