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 リーダーは必要ありません (もちろん使用できますが、何のメリットもありません)。データ ファイルを読み取り、現在のセクションの状態を保持するだけです。空行では、現在のセクションを保存し、状態をリセットします。

このようなものが動作するはずです:

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 に答える
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

次に、「csv」ファイルの「列」の内容として Name: xyz、などを取得します。さらに処理するには、コロンでそれらを分割するだけで済みます…</p>DNS: xyz

于 2013-03-16T21:39:24.397 に答える