如何在 python 中解析生成的 csv 字符串
how to parse a generated csv string in python
所以我在解析 csv 文件时在 python 中生成了这个复杂的字符串。这是字符串现在的状态:
[
{'id': 1463, 'name': 'culture clash'},
{'id': 2964, 'name': 'future'},
{'id': 3386, 'name': 'space war'},
{'id': 3388, 'name': 'space colony'},
{'id': 3679, 'name': 'society'},
{'id': 3801, 'name': 'space travel'},
{'id': 9685, 'name': 'futuristic'},
{'id': 9840, 'name': 'romance'},
{'id': 9882, 'name': 'space'},
{'id': 9951, 'name': 'alien'},
{'id': 10148, 'name': 'tribe'},
{'id': 10158, 'name': 'alien planet'},
{'id': 10987, 'name': 'cgi'},
{'id': 11399, 'name': 'marine'},
{'id': 13065, 'name': 'soldier'},
{'id': 14643, 'name': 'battle'},
{'id': 14720, 'name': 'love affair'},
{'id': 165431, 'name': 'anti war'},
{'id': 193554, 'name': 'power relations'},
{'id': 206690, 'name': 'mind and soul'},
{'id': 209714, 'name': '3d'},
]
假设这个字符串存储在一个名为 x 的变量中。除了一遍又一遍地使用 .split('something') 同时将字符串重新组合在一起直到没有异常值,是否有更快的方法来解析此字符串?
我想要实现的是让一些东西看起来更具可读性和易于操作,例如:
id: someNumber, name: someName... repeat until no more data
我尝试的是将绳子分开,然后多次将其重新组合在一起,直到达到预期的效果。或者是否有更好的方法来解析和操作此字符串?
基本上我需要提取所有 id 和相应的名称,以便稍后插入 table。
我希望您已经导入并使用了 csv 模块。然后将字典附加到列表中。所以,它是“列表”而不是“字符串”。
您可以使用以下方法打印此列表:
for i in range(len(test)):
print(f'id : {test[i]["id"]} name : {test[i]["name"]},', end=" ")
这里test
是列表的名称。输出为:
id : 1463, name : culture clash id : 2964, name : future id : 3386, ....
如果您真的不想导入任何通用模块,您可以这样做,但请注意,实现是非常特定于数据的,如问题所示:
yourstring = """[{"id": 1463, "name": "culture clash"}, {"id": 2964, "name": "future"}, {"id": 3386, "name": "space war"}, {"id": 3388, "name": "space colony"}, {"id": 3679, "name": "society"}, {"id": 3801, "name": "space travel"}, {"id": 9685, "name": "futuristic"}, {"id": 9840, "name": "romance"}, {"id": 9882, "name": "space"}, {"id": 9951, "name": "alien"}, {"id": 10148, "name": "tribe"}, {"id": 10158, "name": "alien planet"}, {"id": 10987, "name": "cgi"}, {"id": 11399, "name": "marine"}, {"id": 13065, "name": "soldier"}, {"id": 14643, "name": "battle"}, {"id": 14720, "name": "love affair"}, {"id": 165431, "name": "anti war"}, {"id": 193554, "name": "power relations"}, {"id": 206690, "name": "mind and soul"}, {"id": 209714, "name": "3d"}]"""
for d in eval(yourstring):
print(f'id: {d["id"]}, name: {d["name"]}')
输出:
id: 1463, name: culture clash
id: 2964, name: future
id: 3386, name: space war
id: 3388, name: space colony
id: 3679, name: society
id: 3801, name: space travel
id: 9685, name: futuristic
id: 9840, name: romance
id: 9882, name: space
id: 9951, name: alien
id: 10148, name: tribe
id: 10158, name: alien planet
id: 10987, name: cgi
id: 11399, name: marine
id: 13065, name: soldier
id: 14643, name: battle
id: 14720, name: love affair
id: 165431, name: anti war
id: 193554, name: power relations
id: 206690, name: mind and soul
id: 209714, name: 3d
解决方案
因为您的字符串内容是有效的 Python 代码,您可以将其视为这样。
yourstring = eval(yourstring)
print(type(yourstring)) # <class 'list'>
print(len(yourstring)) # 21
print(type(yourstring[0])) # <class 'dict'>
这使得 yourstring
成为每个元素中具有 dict()
的 list()
对象。
警告
但出于安全考虑,绝对不建议使用eval()
。但是您的“最小”工作示例没有提供更多信息来找到更好的解决方案。正如其他人所说,Python 的 csv
和 json
模块是更好、更安全的解决方案的良好开端。
所以我在解析 csv 文件时在 python 中生成了这个复杂的字符串。这是字符串现在的状态:
[
{'id': 1463, 'name': 'culture clash'},
{'id': 2964, 'name': 'future'},
{'id': 3386, 'name': 'space war'},
{'id': 3388, 'name': 'space colony'},
{'id': 3679, 'name': 'society'},
{'id': 3801, 'name': 'space travel'},
{'id': 9685, 'name': 'futuristic'},
{'id': 9840, 'name': 'romance'},
{'id': 9882, 'name': 'space'},
{'id': 9951, 'name': 'alien'},
{'id': 10148, 'name': 'tribe'},
{'id': 10158, 'name': 'alien planet'},
{'id': 10987, 'name': 'cgi'},
{'id': 11399, 'name': 'marine'},
{'id': 13065, 'name': 'soldier'},
{'id': 14643, 'name': 'battle'},
{'id': 14720, 'name': 'love affair'},
{'id': 165431, 'name': 'anti war'},
{'id': 193554, 'name': 'power relations'},
{'id': 206690, 'name': 'mind and soul'},
{'id': 209714, 'name': '3d'},
]
假设这个字符串存储在一个名为 x 的变量中。除了一遍又一遍地使用 .split('something') 同时将字符串重新组合在一起直到没有异常值,是否有更快的方法来解析此字符串?
我想要实现的是让一些东西看起来更具可读性和易于操作,例如:
id: someNumber, name: someName... repeat until no more data
我尝试的是将绳子分开,然后多次将其重新组合在一起,直到达到预期的效果。或者是否有更好的方法来解析和操作此字符串?
基本上我需要提取所有 id 和相应的名称,以便稍后插入 table。
我希望您已经导入并使用了 csv 模块。然后将字典附加到列表中。所以,它是“列表”而不是“字符串”。
您可以使用以下方法打印此列表:
for i in range(len(test)):
print(f'id : {test[i]["id"]} name : {test[i]["name"]},', end=" ")
这里test
是列表的名称。输出为:
id : 1463, name : culture clash id : 2964, name : future id : 3386, ....
如果您真的不想导入任何通用模块,您可以这样做,但请注意,实现是非常特定于数据的,如问题所示:
yourstring = """[{"id": 1463, "name": "culture clash"}, {"id": 2964, "name": "future"}, {"id": 3386, "name": "space war"}, {"id": 3388, "name": "space colony"}, {"id": 3679, "name": "society"}, {"id": 3801, "name": "space travel"}, {"id": 9685, "name": "futuristic"}, {"id": 9840, "name": "romance"}, {"id": 9882, "name": "space"}, {"id": 9951, "name": "alien"}, {"id": 10148, "name": "tribe"}, {"id": 10158, "name": "alien planet"}, {"id": 10987, "name": "cgi"}, {"id": 11399, "name": "marine"}, {"id": 13065, "name": "soldier"}, {"id": 14643, "name": "battle"}, {"id": 14720, "name": "love affair"}, {"id": 165431, "name": "anti war"}, {"id": 193554, "name": "power relations"}, {"id": 206690, "name": "mind and soul"}, {"id": 209714, "name": "3d"}]"""
for d in eval(yourstring):
print(f'id: {d["id"]}, name: {d["name"]}')
输出:
id: 1463, name: culture clash
id: 2964, name: future
id: 3386, name: space war
id: 3388, name: space colony
id: 3679, name: society
id: 3801, name: space travel
id: 9685, name: futuristic
id: 9840, name: romance
id: 9882, name: space
id: 9951, name: alien
id: 10148, name: tribe
id: 10158, name: alien planet
id: 10987, name: cgi
id: 11399, name: marine
id: 13065, name: soldier
id: 14643, name: battle
id: 14720, name: love affair
id: 165431, name: anti war
id: 193554, name: power relations
id: 206690, name: mind and soul
id: 209714, name: 3d
解决方案
因为您的字符串内容是有效的 Python 代码,您可以将其视为这样。
yourstring = eval(yourstring)
print(type(yourstring)) # <class 'list'>
print(len(yourstring)) # 21
print(type(yourstring[0])) # <class 'dict'>
这使得 yourstring
成为每个元素中具有 dict()
的 list()
对象。
警告
但出于安全考虑,绝对不建议使用eval()
。但是您的“最小”工作示例没有提供更多信息来找到更好的解决方案。正如其他人所说,Python 的 csv
和 json
模块是更好、更安全的解决方案的良好开端。