查找字符串以指定格式失败的地方

我有一个必须看起来像的字符串

[[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 pd

import ast

import sys


df = pd.read_csv("whole.csv", sep = ";")

_ = 1

for 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


白猪掌柜的
浏览 120回答 2
2回答

梵蒂冈之花

def check_string(s):    for item in s.split(','):        if item.count('[') > 1:            print(item, s.index(item))            return False    return Truewith 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 语句。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python