为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白猪掌柜的 2021-06-04 10:39:35
我有一个必须看起来像的字符串[[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 语句。


查看完整回答
反对 回复 2021-06-09
  • 2 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信