【发布时间】:2020-11-14 19:16:36
【问题描述】:
我正在尝试处理以下要求。作为 Python 编程的初学者,我无法摆脱在声明变量时面临的问题。我有一个巨大的 XML,我需要打开它并从中创建三个字典。
这是我的编程步骤。
- 使用内置的打开功能打开文件
- 从上面创建的对象中读取每一行
- 在某些标签之间,我需要搜索一个模式并将数据填充到字典中。
XML 文件看起来像
<tag_1>
name=(pattern1)
age=(pattern1.1)
company=(pattern1.2)
<\tag_1>
<tag_2>
name=(pattern2)
age=(pattern2.1)
company=(pattern2.2)
<\tag_2>
<tag_3>
name=(pattern3)
age=(pattern3.1)
comapany=(pattern3.2)
<\tag_3>
以此类推,上面有重复的标签。
从上面的每个标签,我需要创建 3 个字典,例如:
dict1[pattern1]['age']=pattern1.1
dict1[pattern1]['company']=pattern1.2
dict2 和 dict3 也是如此。
创建了一个字典函数,将参数作为行、字典传递。
for line in file.readlines():
dict_instance(line, dictionary_1 )
dict_instance(line, dictionary_2 )
dict_instance(line, dictionary_3 )
def dict_instance(line, object):
#ON TAG START (i have this condition set in my code)
if re.search(r'name=(.*)', line):
name=re.search(r'name=(.*)', line).group(1)
if re.search(r'age=(.*)', line):
age=re.search(r'age=(.*)', line).group(1)
if re.search(r'company=(.*)', line):
company=re.search(r'company=(.*)', line).group(1)
#ON TAG END (i have this condition set in my code)
object[name]={}
if not age:
object[name]['age']=age
if not company:
object[name]['company']=company
每个数据标签都应该在每个字典中,比如tag1到dict1,tag2到dict2,tag3到dict3。
现在我的问题是如何创建每个字典本地的“姓名”、“年龄”和“公司”变量,如果我创建全局变量,这些将在所有三个字典中混合,从而在其中创建不正确的数据.
以上如有缩进问题请忽略。
【问题讨论】:
-
dict_instance 是一个函数吗?我错过了
def关键字,但它似乎是一个函数。 E:另外,你似乎每读一行就调用它 3 次,这对我来说没有意义。 -
函数内部的变量是函数的局部变量
-
(读者一般不会忽略缩进的问题——如果你的问题的呈现有错误,请更正。如果这里有错误但你的实际代码中没有,读者会给你错误的建议)。
-
糟糕,因为缺少 def 关键字,有没有更好的方法来处理这个问题,而不是将每一行传递给三个函数调用。并且默认情况下,这些变量不会被视为局部变量,从而获得未绑定的局部错误异常。这个论坛的好处是如果我们有缩进错误,它不允许提出问题,所以希望没有这样的问题。
-
为什么需要 3 个字典?每个
tag一个?
标签: python dictionary