Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解析特定格式的列表_Python - Fatal编程技术网

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) 第二项
u'Address'
定义了数据库的字段,其余的
u'
定义了数据。 像

3) 对所有项目重复此步骤

也许还有其他好主意

但是我不知道用Python怎么做。有人能帮我做吗

编辑: 下面是我如何构建列表的:

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--您最初是如何建立该列表的?如果我们知道这一点,那么我可以指导您如何将其构建为一个
dict
。我从一个网页中提取了它。从该网页中,您是如何将其转化为您现在拥有的表单的?(SaunJein完成了<代码> d [地址] ]…
以显示它的样子,但您可以用一个变量(例如,在注释中使用内联代码)轻松地执行它:<代码> x=“地址”< /Code > <代码> d[x] =…< /代码>,因此,您可以根据需要设置x…代码很好,但有一个问题。如果列表类似于
u“Last Name:”
它只选择Name:,并最后截断。有什么解决方案吗?我的代码依赖于键之间没有空格的事实,您可以使用
Last Name
,我将上面的代码复制/粘贴到我的python解释器中,没有收到任何错误。
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']}