2012-03-01 54 views
0

Python初學者在這裏。我正在使用matplotlib庫從製表符分隔的文本文件製作圖形。我希望我的腳本具有靈活性,以便它可以採用不同類型的數據文件並將它們轉換爲圖形。我遇到的關鍵問題是不同的文本文件在數據開始之前具有不同數量的標題行。我希望有一種方法可以讓Python找出頭部有多少行,然後刪除它們。如何使用Python去除未知長度的標題

我認爲這可能通過兩種方式來完成:

1)計數每行的列/元素在文件中最經常存在的數量,因爲大部分線路將包含感興趣的數據列。然後使用for循環,刪除所有不包含此列數的行。

2)統計文件最後一行的列數/元素數,然後刪除任何不符合此長度的行。正如所有使用最後一行的文件也是數據一樣,這也是可行的。

如果任何人都可以告訴我一個簡短的方法來做到這一點在python中集成到我的腳本,真的會有很大的幫助。

非常感謝,

Rubal

+2

這聽起來像一個合理的想法。你有什麼嘗試? – 2012-03-01 17:58:04

+0

嗨,我還應該補充一點,在完成這個之後,我會另外刪除第一個剩餘行包裝,其中有一個標題的數據高於數據(這通常是我的數據)。我與大型基因組數據集一起工作,因此丟失一行數據是可以的。 – user964689 2012-03-01 18:52:03

+0

恐怕我還沒有嘗試過任何東西,除了設置for循環之外:對於輸入文件中的行:#iterate輸入文件中的每一行 \t line = line.rstrip() \t fields = line.split(「 \ t「) – user964689 2012-03-01 18:52:45

回答

0

1)

# lines = lines parsed out of file 
line_store = {} 
for line in lines: 
    tokens = line.split('\t') 
    if len(tokens) in line_store: 
     line_store[len(tokens)].append(line) 
    else: 
     line_store[len(tokens)] = [line] 
most = [] 
for line_group in line_store.values(): 
    if len(line_group) > len(most): 
     most = line_group 

most最終會被列表中選擇所需

2)

# lines = lines parsed out of file 
tokens_in_last_line = len(lines[-1].split('\t')) 
lines_with_correct_number_of_tokens = [] 
for line in lines[:-2]: 
    if len(line.split('\t')) == tokens_in_last_line 
     lines_with_correct_number_of_tokens.append(line) 
lines_with_correct_number_of_tokens.append(lines[-1]) 

`lines_with_correct_number_of_tokens'將使您的所有行具有與文件中最後一行相同數量的標記。

儘管這兩種解決方案都有重大缺陷。 (1)會扼殺,如果您有與內容行相同的標記數量的標頭,或標頭行數超過內容行數。 (2)如果您有頁腳行,或者最後一行是空白的,或者如果標題行與內容行具有相同的標記數量,則會窒息。我認爲你應該看看你是否可以想出更優雅的解決方案。

+0

感謝這些!你是對的缺點。爲了減輕這一點,我會在完成後刪除一個標題行。這應該在大多數情況下覆蓋我,如果不是,那麼當我嘗試繪製數據時應該拋出錯誤,並且在這裏我將不得不手動更正這些文件。 – user964689 2012-03-01 18:54:12

+0

你也是對的,更優雅的解決方案會更好。如果任何人都可以想到一個我很樂意使用它。以上就是我可以想到的頭文件長度可變的文件問題。 – user964689 2012-03-01 18:55:56

+0

對不起新手問題,但我如何獲得線條解析出我的文件'線'?謝謝 – user964689 2012-03-01 19:02:56

相關問題