在python中使用子字符串进行搜索

在python中使用子字符串进行搜索,python,text-processing,python-textprocessing,Python,Text Processing,Python Textprocessing,我有一个txt文件,它有两列,如下所示- LocationIndex ID P-1-A100A100 X000PY66QL P-1-A100A100 X000RE0RRD P-1-A100A101 X000R39WBL P-1-A100A103 X000LJ7MX1 P-1-A100A104 X000S5QZMH P-1-A100A105 X000MUMNOR P-1-A100A105 X000S5R571 P-1-A100B100 X000M

我有一个
txt
文件,它有两列,如下所示-

LocationIndex   ID
P-1-A100A100    X000PY66QL
P-1-A100A100    X000RE0RRD
P-1-A100A101    X000R39WBL
P-1-A100A103    X000LJ7MX1
P-1-A100A104    X000S5QZMH
P-1-A100A105    X000MUMNOR
P-1-A100A105    X000S5R571
P-1-A100B100    X000MXVHFZ
P-1-A100B100    X000Q18233
P-1-A100B100    X000S6RSZJ
P-1-A100B101    X000K7C4HN
P-1-A100B102    X000RN9U59
P-1-A100B103    X000R4MZE1
P-1-A100B104    X000K9HSKT
P-1-A100C101    X000MCB5DZ
P-1-A100C101    X000O0T0RX
P-1-A100C102    X000RULTGZ
P-1-A100C104    X000O5NXKN
P-1-A100C104    X000RN3G9F
P-1-A100C105    X000D4P1P5
P-1-A100C105    X000QNBKDF
P-1-A100D100    X000FADDHP
P-1-A100D100    X000KR34DB
P-1-A100D100    X000MPCZ1X
P-1-A100D100    X000S6TO0B
P-1-A100D101    B00PANFBJ2
P-1-A100D101    X000Q1IYQD
P-1-A100D101    X000QEMDV7
P-1-A100D101    X000QHRKM1
P-1-A100D101    X000RUGIKR
P-1-A100D102    X000FF656L
P-1-A100D102    X000S13C5J
以LocationIndex作为搜索索引,我需要找到哪些相邻位置具有相同的ID

定义相邻位置:

通过更改位置索引的最后一个字符,可以给出特定位置索引的
左侧和右侧
位置, e、 g:对于
P-1-A100B103
,左边是
P-1-A100B102
,右边是
P-1-A100B104
(最后一位数字在范围
0-5

特定位置索引的
顶部和底部
位置通过更改位置索引的最后四个字符给出, e、 g:对于
P-1-A100B103
,顶部是
P-1-A100C103
,右侧是
P-1-A100A103
(最后第四位数字在范围
A-E

我需要找出给定位置索引的ID(此处用于eg
p-1-A100B103
)是否与其
左侧
右侧
顶部
底部
位置索引的ID匹配

我试过以下方法-

import sys

with open( 'Test.txt', 'r') as f:
    for line in f:
        line = line.split()
                x = int(line[1])
                y = line[2]
                if x[-1:] > 0 && x[-1: < 5] && x[-4:] != 'A' && x[-4:] != 'E':  # eliminating corner cases
                        right = ord x[12] + 1
                        left  = ord x[12] - 1
                        top   = chr(ord x[9] + 1)
                        bottom = chr(ord x[9] - 1)
                        # how to search ID for individual right, left, top and bottom?
导入系统 将open('Test.txt','r')作为f: 对于f中的行: line=line.split() x=int(第[1]行) y=第[2]行 如果x[-1:]>0&&x[-1:<5]&&x[-4::!='A'&&x[-4::!='E':#消除角落案例 右=作战需求文件x[12]+1 左=ord x[12]-1 top=chr(ord x[9]+1) 底部=chr(ord x[9]-1) #如何搜索个人右、左、上、下ID?
我可以在
shell
中完成这项工作,但我需要在Python中完成这项工作。任何提示/帮助都将非常感谢

有点长,而且不是最有效的,但它可以完成工作:

def getData():
    loc_keys = {}
    with open(FILE_PATH, 'r') as f:
        next(f)
        for line in f:
            line = line.split()
            loc, key = line[0], line[1]
            if loc not in loc_keys:
                loc_keys[loc] = set([])
            loc_keys[loc].add(key)

    return loc_keys


def is_adjacent(loc1, loc2):
    if int(loc1[-1]) == int(loc2[-1]) + 1 or \
       int(loc1[-1]) == int(loc2[-1]) - 1 or \
       ord(loc1[-4]) == ord(loc2[-4]) + 1 or \
       ord(loc1[-4]) == ord(loc2[-4]) - 1:
        return True
    else:
        return False


def find_matches(loc, loc_keys):
    if loc not in loc_keys:
        return None

    keys = loc_keys[loc]  # Set of keys for the input location
    matches = set([])
    for i in loc_keys.keys():
        # {*()} is an empty set literal
        if is_adjacent(loc, i) and loc_keys[i].intersection(keys) != {*()}:
            matches.add(i)

    return matches


# Call find_matches( <some LocationIndex>, getData() )
def getData():
loc_键={}
将打开的(文件路径“r”)作为f:
下一个(f)
对于f中的行:
line=line.split()
loc,键=第[0]行,第[1]行
如果loc不在loc_键中:
loc_键[loc]=设置([])
loc_键[loc]。添加(键)
返回loc_键
def相邻(loc1、loc2):
如果int(loc1[-1])==int(loc2[-1])+1或\
int(loc1[-1])==int(loc2[-1])-1或\
ord(loc1[-4])==ord(loc2[-4])+1或\
作战需求文件(loc1[-4])==作战需求文件(loc2[-4])-1:
返回真值
其他:
返回错误
def find_匹配(loc,loc_键):
如果loc不在loc_键中:
一无所获
keys=loc_keys[loc]#输入位置的一组键
匹配=设置([]))
对于loc_keys.keys()中的i:
#{*()}是一个空集文本
如果相邻(loc,i)且loc_键[i]。交叉点(键)!={*()}:
匹配项。添加(i)
复赛
#调用find_matches(,getData())

您尝试了什么,遇到了什么问题?从目前的情况看,它看起来像是一个编程服务请求,这显然是离题的。@guidot这是因为我对python真的很陌生,我几乎帮不上忙。你可以看到我以前的问题,我一直张贴代码,我尝试过,但没有工作。在这里,我甚至无法继续,因此想从StackOverflow获得帮助。txt文件中的两个标题是如何分开的?它们是选项卡分开的。请向我们展示一些东西(读取文件内容并显示它,任何东西)…虽然(我认为)它完成了任务,但代码很糟糕:)@CristiFati不重要,我需要它的一部分在这里完美地工作。稍微调整一下,效果很好!再次感谢:)@CristiFati现在呢?当然更好:)