私は申し訳ありませんが、私は特定の参考文献を知りません、ただ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の宣伝文のようなものがそれらにカンマを持っている(ただし、彼らがしなければ、私は「ドン場合は、コンマの周りの分割は問題であり、それぞれの行のコンマ区切りのビットとは別に、それらの宣言をどのように伝えることができるかを知っています)。