2012-03-18 13 views
0

次のことを行うためのPythonコードを読み書きできるWebサイトへのポインタがありますか?ファイル内の複数の行を含むデータセットをデータセットごとに1行に変換する

これまでのところ、構造化されたデータをリストや辞書に読み込むPythonコードしか見つかりませんでした。複数の行のデータを1つの行にマージするには、行処理の例を参照する必要があります。

問題が

Iは、ファイル内のデータセットを有し、各データセットは、行ごとに一つの項目と、{}で囲まれています。

details_book1{ 
title,txt, book_book1 

author,txt,author_book1 

price,txt, price_book1 } 



details_book2 

{ 

title,txt, book_book2 

author,txt,author_book2 

price,txt, price_book2 
} 

必要な出力:

私はすなわち以下>表形式にトランスポーズする単一の行にデータセットのすべての項目を移調する必要が

入力ファイルの例です

details_book1,book_book1,author_book1,price_book1 details_book2,book_book2,author_book2,price_book2 ... details_bookn,book_bookn,author_bookn,price_bookn 

答えて

0

私は申し訳ありませんが、私は特定の参考文献を知りません、ただlearniあなたは

lines = [line for line in a.split('\n') if line] 

books = [] 
book = '' 
for line in lines: 
    if '}' in line: 
     book += ',' + line 
     book = book.replace('{', ' ').replace('}', ' ') 
     books.append([x.strip() for x in book.split(',') if x.strip()]) 
     book = '' 
    else: 
     book += line + ',' 

これはentititesのリストのリストを作成し、そして:Pythonのドキュメントがあまりにも悪いされていないため、文字列とリストの操作、約ngのが、それは、おそらくこのようなもののような単純なものでしたリストをループでは、変数へのすべての要素を引き出すことができます:

for book, title, a, bookbook, author, b, authorbook, price, c, pricebook in books: 
    print '%s,%s,%s,%s' % (book, bookbook, authorbook, pricebook) 

# result 
details_book1,book_book1,author_book1,price_book1 
details_book2,book_book2,author_book2,price_book2 

をこれは、しかし、いくつかの方法で失敗し、あなたのデータはあなたがこれまでに示してきたものと一致することを要求することができます。特に、テキストの中にカンマを置いて、2番目のリスト内のカンマの前後で本変数を分割すると、あまりにも多くのフィールドに分割され、後でforループ(最後の例のコードスニペット)のアンパックが失敗します。

また、前のブロックの}と同じ行でブロックが開始されると、データを正しく切り取ることができません。この周りには方法がありますが、私は物事を非常にシンプルにしたいと思っていました。

これは出発点として役立つかもしれません。

私はあなたにもこれを行うことができたとします

import re 
for book in re.findall('\w.*?{.*?}', a, flags=re.M|re.S): 
    book = book.replace('\n',',').replace('{',',').replace('}',',') 
    book = [x.strip() for x in book.split(',') if x.strip()] 
    print book 

これは空白の任意の量に続くすべての単語を見つけるためにre.findallを経由して、正規表現を使用し、すべてのもの(非欲張り)中括弧の間。これにより、改行や欠落カンマのビットが発生するので、改行や中カッコをカンマで置き換え、リスト内包表記を使用してカンマを区切り、各分割要素の周りの空白を取り除き、空の文字列を残します。

これは、これらのリストには本の中で毎回結果:

再び
['details_book1', 'title', 'txt', 'book_book1', 'author', 'txt', 'author_book1', 'price', 'txt', 'price_book1'] 
['details_book2', 'title', 'txt', 'book_book2', 'author', 'txt', 'author_book2', 'price', 'txt', 'price_book2'] 

本のタイトルやTXTの宣伝文のようなものがそれらにカンマを持っている(ただし、彼らがしなければ、私は「ドン場合は、コンマの周りの分割は問題であり、それぞれの行のコンマ区切りのビットとは別に、それらの宣言をどのように伝えることができるかを知っています)。

関連する問題