对不起,我不知道具体的参考资料,除了学习字符串和列表操作,python 文档还不错,但它可能像这样简单:
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 + ','
这将创建一个实体列表,您可以遍历该列表,将所有元素提取到变量中:
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
不过,这可能会在某些方面失败,并且要求您的数据与您目前所显示的内容相匹配。特别是,如果您在任何文本中都有逗号,我在第二个列表理解中围绕逗号拆分 book 变量将拆分为太多字段,并且稍后在 for 循环中解包(最后一个示例代码 sn-p)会失败。
另外,如果一个块与前一个块的 } 在同一行开始,它将无法正确切割数据。有一些方法可以解决这个问题,但我想让事情变得非常简单。
也许这可以作为一个起点。
我想你也可以这样做:
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 简介中包含逗号,则用逗号分隔是一个问题(但如果有,我不知道您如何区分逗号分隔位之外的这些简介每一行)。