我有一个必须看起来像的字符串[[12.12345678,12.12345678],[12.12345678,12.12345678],[12.12345678,12.12345678],..]那就是它看起来像一个list of list. 但有时这个字符串有看起来像这样的损坏[12.12[12.12345678,12.12345678],另一个这样的案例[21.28211533,21.22[21.28211517,84.13454000],[12.12在第一个示例中可以看到额外的内容。可能还有其他格式也失败了。目前,我正在使用ast.literal_eval它来检查它的list of lists格式import pandas as pdimport astimport sysdf = pd.read_csv("whole.csv", sep = ";")_ = 1for index, row in df.iterrows(): try: ast.literal_eval(row["gnns_base_lat_long"]) _ += 1 print("\rSuccessful %d" % _, end="") except: _ += 1 print("Fail %d" % _) print(row["gnns_base_lat_long"])print("\n")sys.exit(0)如何编写一个脚本,如果ast.literal_eval失败,我会进入这个字符串以查找它是如何失败的?一个示例输出是Fail: [12.12[12.12345678,12.12345678],包含样本数据的文件。它是一个可下载的 csv 文件。使用";"作为分隔符。如果我能得到一个概括的答案来打印它失败的所有情况,那就太好了(即它不是list of list)
2 回答
梵蒂冈之花
TA贡献1900条经验 获得超5个赞
def check_string(s):
for item in s.split(','):
if item.count('[') > 1:
print(item, s.index(item))
return False
return True
with open('data.csv') as file_obj:
lines = file_obj.readlines()
for line in lines:
check_string(line[1:-1])
输出:
[21.28[21.28033850 1326
[21.93[21.28210850 1482
[21.03[21.28184083 0
杰克答案的简短版本。这将在第一次出现错误字符串时退出。如果您需要所有错误的字符串位置,请删除 return 语句。
添加回答
举报
0/150
提交
取消