2014-02-27 38 views
0

我有一個很長的文件(大約2 * 10^5行乘5列)填充數字(浮點數)。python:findimg文件的第一列的最大數量,並考慮不同列中同一行上的其他數字

我必須找到第一列數字中的最大值,然後考慮同一行上其他四列上的相應數字。

我想我可能會使用使用字典:鍵是第一列中的數字,值是包含其他列表中的數字。我在鍵中找到最大值並讀取相應的值。

有沒有更聰明的方法?該字典將是非常大的...

我,差點忘了:我使用python 2.6。

+0

多少次,你需要重複此爲每個輸入文件?如果一次,爲什麼不掃描文件,保留最佳行? –

+0

我只能重複一次。 – mattiav27

+0

這聽起來像我碰到一個csv文件的情況http://stackoverflow.com/questions/21731270/opening-a-large-json-file-in-python-with-no-newlines-for-csv-然後我使用convert-python-2開發完整的numpy統計信息。如果您只需將該行標識爲讀取並可丟棄其餘數據,則只需要一次運行。 – sabbahillel

回答

0
# define a sorting function based on the first numer, assuimg columns are 
# separated by space or tab 
f = lambda line: float(line.split()[0]) 
# opened file in Python is an iterator, so could be served to max() directly 
with open('your_input_file') as inf: 
    line_with_max_num = max(inf, key=f) 
# turn the other four numbers into a list and print them to the screen 
# or do whatever you like with them 
print [float(_) for _ in line_with_max_num.split()[1:]] 
0
maxn=-float('inf') 
with open(fname) as f: 
    for line in f: 
     if maxn<int(line.split(',')[0]): 
      theLine=line 

#do something with that line: 
print theLine 
0
INPUT = "myfile.txt" 
DELIM = "," 

def first_float(s): 
    first = s.split(DELIM, 1)[0] 
    return float(first) 

with open(INPUT) as inf: 
    max_line = max(inf, key=first_float) 
    max_data = [float(f) for f in max_line.split(DELIM)] 
相關問題