2013-03-16 55 views
0

我有如下具有組織數據的CSV文件:Python的CSV刮

Name: xyz 
DNS: xyz 
Type: xyz 
Date: xyz 

Name: xyz 
DNS: xyz 
Type: xyz 
Date: xyz 

Name: xyz 
DNS: xyz 
Type: xyz 
Date: xyz 

這將繼續爲許多用戶ñ。

我想弄清楚如何在Python中正確讀取這些數據,這似乎不是一個難題,只是困惑於我如何讀取信息,因爲這不是通常的csv文件設置,它會更容易,如果它是名稱,DNS等,那麼我會知道如何正確處理。

我開始是這樣的:)

import csv 
r = csv.reader(open("data.csv")) 

現在做r.next(會得到每一件事情一行行,但因爲我的計劃是,如果有日期,檢查計數器,這不是有幫助大於特定時間,並且類型字段匹配特定值,像循環計數器那樣在循環中添加一些變量。

這是一種接近我的數據是如何構成的意識正在做的,但我不認爲這會幫助我在我的追求:

How can I scrape data from a text table using Python?

+6

呃,不會遠程看起來像一個CSV文件... – 2013-03-16 21:32:39

+1

CSV表示逗號分隔值。在某些地區,分號或製表符也被接受。這些都不在你的例子中。 – liori 2013-03-16 21:41:57

回答

1

這不是一個csv文件。如果這是你的格式,你可以掃描文件,直到你到達一個空白的新行,表示一個部分。然後您可以相應地解析每個部分。

我不」想csv是不會來這裏的任何幫助

你可以讀取該文件,並通過行

f = open('data.csv') 
for line in f: 
    pass 
1

線遍歷它你可以嘗試通過設置來讀取數據**fmtparams參數時調用csv.readerDialect.delimiter設置爲\nDialect.lineterminator\n\n。 (或替換每個\n通過\r\n或只是\r,這取決於你的結束文件的格式就行了。)

然後你會得到Name: xyzDNS: xyz等爲您的「CSV」文件的「列」的內容 - 和你只需要在冒號分割進行進一步處理......

1

正如其他人提到的,你不需要一個CSV閱讀器(確保你可以使用它,但沒有任何好處)。只需讀取數據文件併爲當前部分保留一些狀態。在空白行存儲當前部分並重置狀態。

像這樣的東西應該工作:

def load(input): 
    data = [] 
    current = {} 
    for line in input: 
     # may be useful to strip the line here and forget about 
     # leading/trailing whitespaces 
     if not line.strip(): 
      data.append(current) 
      current = {} 
     # use line.split(':') if `:' does not appear in values 
     colon = line.find(':') 
     if colon == -1: # unknown format, throw an exception or just ignore it 
      continue 
     key = line[:colon] 
     value = line[colon+2:-1] # or line[colon1].strip() to remove trailing whitespace 
     current[key] = value 
    return data 

import sys 

if __name__ == "__main__": 
    with(open(sys.argv[1])) as input: 
     print load(input)