Python 解析特定格式的列表
我有一个特定格式的列表Python 解析特定格式的列表,python,Python,我有一个特定格式的列表 [u' ', u'Address :',u'Sadar Bazaar',u'new Delhi,India',u' ',u'Name :',u'Saun-Jean',u' ',u'Occupation :',u'Developer',u'Hacker',u' '] 我想把记录插入数据库 这是我的想法,怎么做 1) 取两个u''之间的所有项目 2) 第二项u'Address'定义了数据库的字段,其余的u'定义了数据。 像 3) 对所有项目重复此步骤 也许还有其他好主意 但
[u' ', u'Address :',u'Sadar Bazaar',u'new Delhi,India',u' ',u'Name :',u'Saun-Jean',u' ',u'Occupation :',u'Developer',u'Hacker',u' ']
我想把记录插入数据库
这是我的想法,怎么做
1) 取两个u''之间的所有项目 2) 第二项
以显示它的样子,但您可以用一个变量(例如,在注释中使用内联代码)轻松地执行它:<代码> x=“地址”< /Code > <代码> d[x] =…< /代码>,因此,您可以根据需要设置x…代码很好,但有一个问题。如果列表类似于定义了数据库的字段,其余的u'Address'
定义了数据。 像 3) 对所有项目重复此步骤 也许还有其他好主意 但是我不知道用Python怎么做。有人能帮我做吗 编辑: 下面是我如何构建列表的:u'
for tr in browser.find_elements_by_xpath("//tbody//tbody//tr"): tds=tr.find_elements_by_tag_name('td') if tds: data.append([td.text for td in tds])
这是一本更好的词典:d={} d['Address'] = ['sadar bazaar', ...] d['Name'] = [ 'saun-jean', ... ] ...
或者作为字典(或类实例)列表: 要将您的列表转换为我上面提到的词典列表,您可以执行以下操作:{u'Occupation': [u'Developer', u'Hacker'], u'Name': [u'Saun-Jean'], u'Address': [u'Sadar Bazaar', u'new Delhi,India']}
from collections import defaultdict d = defaultdict(list) a = iter(yourlist) key = None for elem in a: if elem == u' ': key = next(a) else: d[key].append(elem)
首先,您必须构建字典,这可以通过以下方式实现(粗略代码): 当然,这是在tds中的TR始终位于同一位置的情况下。 然后,您可以使用“数据”字典按名称提取数据,并按原样使用数据:lis=[u' ', u'Address :',u'Sadar Bazaar',u'new Delhi,India',u' ',u'Name :',u'Saun-Jean',u' ',u'Occupation :',u'Developer',u'Hacker',u' '] strs=' '.join(str(x).strip() for x in lis if str(x).strip()) lis1=strs.split(':') dic={} for i,x in enumerate(lis1[:-1]): if x.strip(): temp_lis=x.strip().split() if i+1 <len(lis1)-1: dic[temp_lis[-1]]=' '.join(lis1[i+1].split()[:-1]) else: dic[temp_lis[-1]]=' '.join(lis1[i+1].split()) print dic
l = [u' ', u'Address :',u'Sadar Bazaar',u'new Delhi,India',u' ',u'Name :',u'Saun-Jean',u' ',u'Occupation :',u'Developer',u'Hacker',u' '] entries = {} key = '' for i in range(len(l)): if l[i] == u' ' and i + 1 < len(l): key = l[i + 1].replace(':', '').strip() entries[key] = [] elif entries.has_key(l[i].replace(':', '').strip()): continue else: # remove trailing space if l[i] != u' ': entries[key].append(l[i]) print entries
但是如果有多个这样的记录。我将如何自动执行。现在,您正在手动将值分配给dict@saunjean--您最初是如何建立该列表的?如果我们知道这一点,那么我可以指导您如何将其构建为一个。我从一个网页中提取了它。从该网页中,您是如何将其转化为您现在拥有的表单的?(SaunJein完成了<代码> d [地址] ]…dict
它只选择Name:,并最后截断。有什么解决方案吗?我的代码依赖于键之间没有空格的事实,您可以使用u“Last Name:”
,我将上面的代码复制/粘贴到我的python解释器中,没有收到任何错误。Last Name
lis=[u' ', u'Address :',u'Sadar Bazaar',u'new Delhi,India',u' ',u'Name :',u'Saun-Jean',u' ',u'Occupation :',u'Developer',u'Hacker',u' '] strs=' '.join(str(x).strip() for x in lis if str(x).strip()) lis1=strs.split(':') dic={} for i,x in enumerate(lis1[:-1]): if x.strip(): temp_lis=x.strip().split() if i+1 <len(lis1)-1: dic[temp_lis[-1]]=' '.join(lis1[i+1].split()[:-1]) else: dic[temp_lis[-1]]=' '.join(lis1[i+1].split()) print dic
{'Occupation': 'Developer Hacker', 'Name': 'Saun-Jean', 'Address': 'Sadar Bazaar new Delhi,India'}
l = [u' ', u'Address :',u'Sadar Bazaar',u'new Delhi,India',u' ',u'Name :',u'Saun-Jean',u' ',u'Occupation :',u'Developer',u'Hacker',u' '] entries = {} key = '' for i in range(len(l)): if l[i] == u' ' and i + 1 < len(l): key = l[i + 1].replace(':', '').strip() entries[key] = [] elif entries.has_key(l[i].replace(':', '').strip()): continue else: # remove trailing space if l[i] != u' ': entries[key].append(l[i]) print entries
{u'Occupation': [u'Developer', u'Hacker'], u'Name': [u'Saun-Jean'], u'Address': [u'Sadar Bazaar', u'new Delhi,India']}