使用 python 中的子字符串搜索
Search using substring in python
我有一个 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.
定义相邻个位置:
特定位置索引的left and right
位置是通过更改位置索引的最后一个字符给出的,
例如:对于 P-1-A100B103
,左边是 P-1-A100B102
,右边是 P-1-A100B104
(最后一位数字在 0-5
范围内)
特定位置索引的top and bottom
位置是通过更改位置索引的倒数第四个字符给出的,
例如:对于 P-1-A100B103
,顶部是 P-1-A100C103
,右侧是 P-1-A100A103
(倒数第四个数字在 A-E
范围内)
我需要查明给定 位置索引 的 ID 是否与 ID 匹配(例如 P-1-A100B103
)它的任何 left
right
top
或 bottom
位置索引 .
我尝试了以下方法 -
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?
我可以在 shell
中完成,但我需要在 Python 中完成。任何 hint/help 将不胜感激
有点长而且不是最有效的,但它完成了工作:
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() )
我有一个 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.
定义相邻个位置:
特定位置索引的left and right
位置是通过更改位置索引的最后一个字符给出的,
例如:对于 P-1-A100B103
,左边是 P-1-A100B102
,右边是 P-1-A100B104
(最后一位数字在 0-5
范围内)
特定位置索引的top and bottom
位置是通过更改位置索引的倒数第四个字符给出的,
例如:对于 P-1-A100B103
,顶部是 P-1-A100C103
,右侧是 P-1-A100A103
(倒数第四个数字在 A-E
范围内)
我需要查明给定 位置索引 的 ID 是否与 ID 匹配(例如 P-1-A100B103
)它的任何 left
right
top
或 bottom
位置索引 .
我尝试了以下方法 -
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?
我可以在 shell
中完成,但我需要在 Python 中完成。任何 hint/help 将不胜感激
有点长而且不是最有效的,但它完成了工作:
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() )