我可以请一些指向我可以阅读的网站并获得编写python代码以执行以下操作的技巧吗?
到目前为止,我只能找到将结构化数据读入列表和词典的python代码。我需要看一个行处理示例,将多行数据合并到一行。
问题
我在文件中有数据集,每个数据集都包含在{}
中,每行一个项目。
我需要将数据集的所有项目转置为单行,即转置为表格式>以下是一个例子
输入文件:
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 :(得分:0)
对不起我不知道特别的引用,除了学习字符串和列表操作之外,python文档也不是太糟糕,但它可能就像这样简单:< / p>
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
但是,这可能会在某些方面失败,并且要求您的数据与您目前所显示的数据相匹配。特别是,如果你在任何一个文本中都有逗号,那么我将第二个列表中的逗号分开的书变量将被分解为太多的字段,而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 blurbs这样的东西都有逗号(或者如果它们有,我不知道除了逗号分隔的位之外你怎么能分辨出这些简介)在每一行)。