2016-02-03 46 views
0

我有一個文本文件,其中包含大約25000行和10列數據,其中包括一列日期和與這些日期相關的一列數據(以yyyymmdd格式)。它是按以下格式:重新排列文本文件的列Python

19500101  20.7 
19500102 19.9 
19500103  -77.1 
19500104  -1.2 

我想要得到它,這樣所有的1月1日天都在一起,所有的1月2日天是一起的,所以對天的休息。那就是:

19500101  20.7 
19510101  230.1 
19520101 -91.8 
19530101 20.0 

如何能夠重新排列文本文件以使用python獲得這種格式?

+0

請提供5-6行輸入數據(10列)和預期輸出。 – MaxU

回答

0

這樣做的一種方法是設置一個字典,使用日期作爲關鍵字並將這些元素附加到每個關鍵字的列表中。然後設置輸出,遍歷日期並獲取每個日期的列表(作爲鍵)並以所需格式輸出列表中的元素。

如果您使用該元素的鍵(您已知)作爲第一項打印列表中的每個元素,並將該元素作爲第二項打印出來,您將擁有它。或者,您可以按問題How can I sort a dictionary by key?中所示對字典進行排序。

一個例子是

for key in sorted(mydict): 
    print "%s: %s" % (key, mydict[key]) 

由於mydict [關鍵]是一個列表,你可以把它處理

for key in sorted(mydict): 
    for elem in mydict[key]: 
     print "%s: %s" % (key, elem) 
1

可以讀取數據到一個列表,每行是一個字符串列表。然後使用僅查看日期的mmdd部分的鍵功能對列表進行排序。

下面是一些代碼,說明了使用硬編碼列表的想法,但應該很容易讓它適應它來讀取文件中的行。

data = ''' 
19500101  20.7 
19500102 19.9 
19500103  -77.1 
19500104  -1.2 
19510101  230.1 
19520101 -91.8 
19530101 20.0 
'''.splitlines()[1:] 

def keyfunc(line): 
    return line.split(None, 1)[0][4:] 

data.sort(key=keyfunc) 

for row in data: 
    print row  

輸出

19500101  20.7 
19510101  230.1 
19520101 -91.8 
19530101 20.0 
19500102 19.9 
19500103  -77.1 
19500104  -1.2 

這裏是一個票友鍵功能:

def keyfunc(line): 
    date = line.split(None,1)[0] 
    return date[4:], date[:4] 

如果兩個項目具有mmdd同他們再上yyyy相比,使所有物品與同樣的mmdd被分組在一起,但在組內,他們也將按年分類。

line.split(None,1)[0]獲取該行的日期部分。你可能只是使用line.split()[0]做同樣的事情,但效率較低,因爲它必須將整條線分成單獨的列,我們只需要我們的密鑰的第一列。

+0

我用這個,它工作。謝謝! – CyclonicLife

0

實現它的一種方法是將日期轉換爲(日,月,年)的元組,然後按它進行排序。喜歡這個東西應該這樣做:

def date_as_tuple(date): 
    return (int(date[6:8]), int(date[4:6]), int(date[0:4])) 

lines = open("file", "r").readlines() 
lines.sort(key=lambda line: date_as_tuple(line.split()[0])) 
print "".join(lines) 
0

循環通過文本文件創建一個字典列表,然後繼續下面!

import datetime 

    data = [{'date':'2015-01-10','Info':'b'}, #Default data layout 
      {'date':'2015-01-01','Info':'a'}, 
      {'date':'2016-01-01','Info':'d'}, 
      {'date':'2015-10-01','Info':'c'}] 

    #Then using the sort method, sort the data in a YMD format 
    data.sort(key=lambda x: datetime.datetime.strptime(x['date'], '%Y-%M-%d')) 

    #Now just loop through list writing each index back to file!!! 
+0

這將按年份,然後是月份,然後是一天。但是,OP想要按月分類,然後按天分類(然後可能按年分類)。 –

+0

然後將格式更改爲%M-%d-%Y! – TheLazyScripter

+0

當然,這是行得通的。儘管如此,我認爲我的方式比簡單一點,可能比調用'.strptime'更快。 :) –