csv 数据以逗号结尾 | python |
csv data ending with comma at end | python |
我写了一个代码,但是代码的问题是
我无法确定如何从我获得的预期输出中删除最后一个结束命令逗号
代码:
import xml.etree.ElementTree as ET
xml_data='''
<job_details>
<role>
<name>Vikas</name>
<salary>.95</salary>
<job_description>Developer</job_description>
</role>
<role>
<name>Dip</name>
<salary>.95</salary>
<job_description>Backend Developer</job_description>
</role>
</job_details>
'''
get_root_element = ET.fromstring(xml_data)
cnt=0
for i in range(len(list(get_root_element))):
for x in get_root_element[i]:
print(x.text,end=",")
cnt=cnt + 1
if cnt == len(list(get_root_element[1])):
break
print()
预期输出:
Vikas,.95,Developer,
Dip,.95,Backend Developer,
您可以这样简化您的代码:
可以直接遍历get_root_Elements
。
然后不使用 print()
,而是使用每个项目的所有元素,并使用正确的分隔符 join
。
也不需要跳出 for 循环,它会自行停止。
我将所有结果附加到列表 out
,其中 2 个字符串由 ,
分隔
import xml.etree.ElementTree as ET
xml_data='''
<job_details>
<role>
<name>Vikas</name>
<salary>.95</salary>
<job_description>Developer</job_description>
</role>
<role>
<name>Dip</name>
<salary>.95</salary>
<job_description>Backend Developer</job_description>
</role>
</job_details>
'''
get_root_element = ET.fromstring(xml_data)
out = []
for item in get_root_element:
res = ','.join(x.text for x in item)
out.append(res)
print(out)
['Vikas,.95,Developer', 'Dip,.95,Backend Developer']
正如我所说,您的代码有一些基本的“错误”。 for 循环会在遍历所有元素时自行停止。无需定义计数并检查计数何时等于迭代器的 len。如果您仍然想知道如何使用此 print
语句来管理它,您可以遍历除最后一个元素之外的所有元素并使用 end
语句打印它。最后一个单独打印,没有 end
。不过,我不会推荐它。
for i in range(len(list(get_root_element))):
for x in get_root_element[i][:-1]:
print(x.text,end=",")
print(get_root_element[i][-1].text)
Vikas,.95,Developer
Dip,.95,Backend Developer
正在编辑您的代码,这是一个建议的解决方案:
import xml.etree.ElementTree as ET
xml_data='''
<job_details>
<role>
<name>Vikas</name>
<salary>.95</salary>
<job_description>Developer</job_description>
</role>
<role>
<name>Dip</name>
<salary>.95</salary>
<job_description>Backend Developer</job_description>
</role>
</job_details>
'''
get_root_element = ET.fromstring(xml_data)
result = []
for i in range(len(list(get_root_element))):
temp = []
for x in get_root_element[i]:
temp.append(x.text)
temp_str = ','.join(temp)
result.append(temp_str)
print(result)
输出
['Vikas,.95,Developer', 'Dip,.95,Backend Developer']
但我必须说@Rabinzel 有一个更简洁的解决方案!
我写了一个代码,但是代码的问题是
我无法确定如何从我获得的预期输出中删除最后一个结束命令逗号
代码:
import xml.etree.ElementTree as ET
xml_data='''
<job_details>
<role>
<name>Vikas</name>
<salary>.95</salary>
<job_description>Developer</job_description>
</role>
<role>
<name>Dip</name>
<salary>.95</salary>
<job_description>Backend Developer</job_description>
</role>
</job_details>
'''
get_root_element = ET.fromstring(xml_data)
cnt=0
for i in range(len(list(get_root_element))):
for x in get_root_element[i]:
print(x.text,end=",")
cnt=cnt + 1
if cnt == len(list(get_root_element[1])):
break
print()
预期输出:
Vikas,.95,Developer,
Dip,.95,Backend Developer,
您可以这样简化您的代码:
可以直接遍历get_root_Elements
。
然后不使用 print()
,而是使用每个项目的所有元素,并使用正确的分隔符 join
。
也不需要跳出 for 循环,它会自行停止。
我将所有结果附加到列表 out
,其中 2 个字符串由 ,
import xml.etree.ElementTree as ET
xml_data='''
<job_details>
<role>
<name>Vikas</name>
<salary>.95</salary>
<job_description>Developer</job_description>
</role>
<role>
<name>Dip</name>
<salary>.95</salary>
<job_description>Backend Developer</job_description>
</role>
</job_details>
'''
get_root_element = ET.fromstring(xml_data)
out = []
for item in get_root_element:
res = ','.join(x.text for x in item)
out.append(res)
print(out)
['Vikas,.95,Developer', 'Dip,.95,Backend Developer']
正如我所说,您的代码有一些基本的“错误”。 for 循环会在遍历所有元素时自行停止。无需定义计数并检查计数何时等于迭代器的 len。如果您仍然想知道如何使用此 print
语句来管理它,您可以遍历除最后一个元素之外的所有元素并使用 end
语句打印它。最后一个单独打印,没有 end
。不过,我不会推荐它。
for i in range(len(list(get_root_element))):
for x in get_root_element[i][:-1]:
print(x.text,end=",")
print(get_root_element[i][-1].text)
Vikas,.95,Developer
Dip,.95,Backend Developer
正在编辑您的代码,这是一个建议的解决方案:
import xml.etree.ElementTree as ET
xml_data='''
<job_details>
<role>
<name>Vikas</name>
<salary>.95</salary>
<job_description>Developer</job_description>
</role>
<role>
<name>Dip</name>
<salary>.95</salary>
<job_description>Backend Developer</job_description>
</role>
</job_details>
'''
get_root_element = ET.fromstring(xml_data)
result = []
for i in range(len(list(get_root_element))):
temp = []
for x in get_root_element[i]:
temp.append(x.text)
temp_str = ','.join(temp)
result.append(temp_str)
print(result)
输出
['Vikas,.95,Developer', 'Dip,.95,Backend Developer']
但我必须说@Rabinzel 有一个更简洁的解决方案!