0

私はテキストファイルにデータを持っていて、それをデータベースに保存する必要がありますが、今ではそれを簡単にする方法を少し混乱させています。

これが私のデータの例です:

a: text1
b: text2
c: text3
blah blah not necessary text
a: text4
b: text5
c: text6
etc

それで、私がこのデータを解析するのを手伝ってくれませんか。私はすでに次のコードを実行しました

import urllib2 as ur

def getPageData(url):
    return ur.urlopen(url).readlines()

checkList = ['a', 'b', 'c']

if __name__ == '__main__':
    textList = getPageData(url)
    res = []
    for i in textList:
        for y in checkList:
            if y in i:
                print i

ベースにテーブルを作成します

id | a varchar | b varchar | c varchar |

そして私は次の結果を期待しています

id | a varchar | b varchar | c varchar |
1  | text1     | text2     | text3     |
2  | text4     | text5     | text6     |
n  | text      | text      | text      |

テキストファイルを1行ずつ読み取る場合、このテキストを論理ブロックに分割するにはどうすればよいですか。たとえば、このデータを使用してa、b、cの辞書を作成し、次にこのブロックが終了したら、辞書をリストに追加します。その後、リストを作成します。それをベースに保存するための辞書の。しかし、この辞書を使用してこのリストを作成する方法と、チェックする必要があるもの、およびその中の不要なデータを回避する方法を少し混乱させましたか?これを行うためのよりエレガントな方法はありますか?

4

2 に答える 2

3

コロンで分割し:、最初の部分が許可されたプレフィックスのセットに含まれているかどうかをテストします。

checkList = set(['a', 'b', 'c'])

for i in textList:
    check, rest = i.split(':', 1)
    if check.strip() not in checkList:
        continue
    data = rest.strip()
    # insert data into database; check is your column name.
于 2012-09-01T10:00:02.343 に答える
1

これはどう:

text = """a: text1
b: text2
c: text3
blah blah not necessary text
a: text4
b: text5
c: text6
etc."""

import re
from collections import defaultdict

d = defaultdict(list)
for line in textList:
    m = re.match(r"([^:]+):\s*(.*)", line)
    if m:
        d[m.group(1)].append(m.group(2))

次に、

>>> d
defaultdict(<type 'list'>, {'a': ['text1', 'text4'], 'c': ['text3', 'text6'], 
'b': ['text2', 'text5']})

正規表現は、少なくとも1つの識別子(aたとえば)、次に1つのコロンを含む行を識別し、識別子とコロン(.*)に続くテキストを一致のグループに入れます。次に、結果を「デフォルトの辞書」に入れて、紹介されたときにその内容を作成します。

識別子を事前に知っている場合は、

m = re.match(r"(a|b|c|otherid|diff_id|etc)\s*:\s*(.*)", line)

代わりは。

于 2012-09-01T10:05:40.530 に答える