Bal*_*aji 2 python file-io next
我尽力寻找答案,但不能满足我的需求.我正在尝试将XML文件重新格式化为自定义格式并遇到问题.这是我的要求.
我有以下XML文件:
<parameters>
<parameter name="name1" value="value1"/>
<parameter name="name2" value="value2"/>
<parameter name="name3" value="value3"/>
<parameter name="name4" value="value4"/>
</parameters>
Run Code Online (Sandbox Code Playgroud)
我希望将其转换为以下内容.
(param().name("name1").value("value1"),
param().name("name2").value("value2"),
param().name("name3").value("value3"),
param().name("name4").value("value4"));
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下代码,它似乎是从原始文件中跳过一些数据到输出.
with open("myfile","r") as f:
for each_line in f:
current_line = each_line
if current_line.strip().startswith('<'):
split_line = current_line.strip().split(' ')
if split_line[0].lstrip('<') == "parameter":
if f.next().strip() == "</parameters":
print 'param().name(' + split_line[1].split('=')[1] + ').value('+ split_line[2].split('=')[1][:-2] + '));\n\n'
else:
print 'param().name(' + split_line[1].split('=')[1] + ').value('+ split_line[2].split('=')[1][:-2] + ')'
Run Code Online (Sandbox Code Playgroud)
我看到使用f.next()会导致问题...不确定我怎么解决这个问题.
您可能应该使用XML解析器.
要修复代码,您可以将结果存储在列表中并将其连接在一起并在最后打印:
result = []
with open("myfile","r") as f:
for each_line in f:
current_line = each_line.strip()
if current_line.startswith('<parameter '):
split_line = current_line.split(' ') # Breaks if there are spaces in name or value.
name = split_line[1].split('=')[1] # Yuck.
value = split_line[2].split('=')[1][:-2] # Yuck.
result.append('param().name({0}).value({1})'.format(name, value)
print '(' + ',\n'.join(result) + ');\n\n'
Run Code Online (Sandbox Code Playgroud)
请注意,您在XML中查找字符串的方式并不健全,对文档进行小的更改会产生问题.使用XML解析器可以减少破解的可能性.
有关
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |