0

我有一个 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

对于许多用户 n,这种情况继续存在。

我试图弄清楚如何在 Python 中正确读取这些数据,这似乎不是一个难题,只是对我如何读取信息感到困惑,因为这不是 csv 文件的通常设置,它会更容易如果是名称、DNS 等,那么我会知道如何正确处理。

我从这样的事情开始:

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

现在做 r.next() 将逐行获取每件事,但这没有帮助,因为我的计划是有一个计数器来检查日期是否大于某个时间,并且类型字段匹配某个值添加一个数字循环中的某些变量,例如计数器。

就数据的结构而言,这有点接近我正在做的事情,但我认为这对我的探索没有帮助:

如何使用 Python 从文本表中抓取数据?

4

3 回答 3

1

那根本不是 csv 文件。如果这是您的格式,您可以扫描文件直到到达一个空白的新行,这表示一个部分。然后,您可以相应地解析每个部分。

我不认为csv在这里不会有任何帮助

您可以读取文件并逐行迭代

f = open('data.csv')
for line in f:
  pass
于 2013-03-16T21:34:50.430 回答
1

您可以尝试在使用set to和to**fmtparams调用时通过设置参数来读取该数据。(或者将每个替换为或,具体取决于文件的行尾格式。)csv.readerDialect.delimiter\nDialect.lineterminator\n\n\n\r\n\r

然后你会得到Name: xyzDNS: xyz等等作为你的“csv”文件的“列”的内容——你只需要在冒号处拆分这些内容以进行进一步处理……</p>

于 2013-03-16T21:39:24.397 回答
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)
于 2013-03-16T21:56:46.303 回答