2013-03-16 4 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 ... –

+1

CSV обозначает значения, разделенные запятыми. В некоторых юрисдикциях также принимается точка с запятой или символ табуляции. Ни один из них не указан в вашем примере. – liori

ответ

1

Это не csv файл вообще. Если это ваш формат, вы можете отсканировать файл, пока не достигнете пустой новой строки, которая обозначает раздел. Затем вы можете проанализировать каждый раздел соответственно.

Я не»думать csv не собирается быть любая помощь здесь

вы можете просто прочитать файл и перебирать его построчно

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

Вы могли бы попытаться прочитать эти данные, установив **fmtparams при вызове csv.reader с Dialect.delimiter устанавливается в \n и Dialect.lineterminator - \n\n. (Или заменяя каждый \n на \r\n или просто \r, в зависимости от конца строки формата файла.)

Тогда вы получите Name: xyz, DNS: 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) 
Смежные вопросы