在一行上找到一个字符串,然后直接在找到的字符串下方返回该字符串-Python或UNIX

时间:2018-08-05 17:36:08

标签: python find position

我在想办法用python解析文件时遇到麻烦。 该文件的行包含随机字母和字符(请参见下文)。

ABCDBCADBADCBABDDACAABCDB 
1#JHHHF##@@GGIHHHIII==DDS
ACBDAACBABDCCBBDCDBBADADA
ISHFIDH#H@1JD=@HHII##GG=H
CCCDDAABCCBABBADBADBAAABA
%%$$#@GGTTT&%MHTHWAIIHJWI

给出一个字符串,例如“ BAD”返回或在其正下方打印字符。 对于此文件,代码应返回:

#@@
##G
MHT
HWA

感谢您的协助!

这就是我的开始:

#!/usr/bin/python
f=open('file.txt')
lines=f.readlines()
num_lines = sum(1 for line in open('file.txt'))
x = 0
while x <= num_lines:
    _str = lines[x]
    loc = _str.find('BAD')
    x = x+1
    _str = lines[x]
    print (_str[loc:loc+2]
    x=x+1

3 个答案:

答案 0 :(得分:2)

您已接近解决方案。单行搜索,在第一行中找到标记(“ BAD”),在第二行中找到具有相同索引的单词:

marker = 'BAD'
marker_len = len(marker)

for l1, l2 in zip(lines, lines[1:]):
   i = l1.find(marker) # Find the first marker
   while i != -1: # Are there any more markers?
     print(l2[i:i + marker_len])
     i = l1.find(marker, i + marker_len) # Search the rest of l1
# #@@
# ##G
# MHT
# HWA

答案 1 :(得分:1)

使用df1 <- structure(list(X.1. = c(6L, 6L, 9L, 4L, 3L, 7L, 9L, 6L, NA, 6L ), X.3. = c(7L, 7L, 10L, 3L, 2L, 7L, 5L, 6L, 6L, 7L), X.5. = c(7L, 13L, 10L, 5L, 5L, 5L, 8L, 7L, 5L, 6L), X.7. = c(8L, 13L, 8L, 3L, 5L, 4L, 8L, NA, 5L, 4L), X.9. = c(NA, 14L, NA, NA, 6L, 5L, NA, 7L, NA, 7L), X.11. = c(NA, NA, NA, NA, NA, 5L, NA, NA, NA, 6L)), class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10")) 模块的解决方案:

re

打印:

import re
str = """ABCDBCADBADCBABDDACAABCDB 
1#JHHHF##@@GGIHHHIII==DDS
ACBDAACBABDCCBBDCDBBADADA
ISHFIDH#H@1JD=@HHII##GG=H
CCCDDAABCCBABBADBADBAAABA
%%$$#@GGTTT&%MHTHWAIIHJWI"""

length = int(len(str)/len(str.split('\n')))
p = re.compile("BAD")
for m in p.finditer(str):
    i = m.start()+length
    j = m.end()+length
    print (str[i:j])

答案 2 :(得分:1)

使用dummyData = [ { id: 1, name: "Leanne Graham", username: "Bret", email: "Sincere@april.biz", address: { street: "Kulas Light", suite: "Apt. 556", city: "Gwenborough", zipcode: "92998-3874", geo: { lat: "-37.3159", lng: "81.1496" } }, phone: "1-770-736-8031 x56442", website: "hildegard.org", company: { name: "Romaguera-Crona", catchPhrase: "Multi-layered client-server neural-net", bs: "harness real-time e-markets" } }, { id: 2, name: "Ervin Howell", username: "Antonette", email: "Shanna@melissa.tv", address: { street: "Victor Plains", suite: "Suite 879", city: "Wisokyburgh", zipcode: "90566-7771", geo: { lat: "-43.9509", lng: "-34.4618" } }, phone: "010-692-6593 x09125", website: "anastasia.net", company: { name: "Deckow-Crist", catchPhrase: "Proactive didactic contingency", bs: "synergize scalable supply-chains" } }, { id: 3, name: "Clementine Bauch", username: "Samantha", email: "Nathan@yesenia.net", address: { street: "Douglas Extension", suite: "Suite 847", city: "McKenziehaven", zipcode: "59590-4157", geo: { lat: "-68.6102", lng: "-47.0653" } }, phone: "1-463-123-4447", website: "ramiro.info", company: { name: "Romaguera-Jacobson", catchPhrase: "Face to face bifurcated interface", bs: "e-enable strategic applications" } }, { id: 4, name: "Patricia Lebsack", username: "Karianne", email: "Julianne.OConner@kory.org", address: { street: "Hoeger Mall", suite: "Apt. 692", city: "South Elvis", zipcode: "53919-4257", geo: { lat: "29.4572", lng: "-164.2990" } }, phone: "493-170-9623 x156", website: "kale.biz", company: { name: "Robel-Corkery", catchPhrase: "Multi-tiered zero tolerance productivity", bs: "transition cutting-edge web services" } }, { id: 5, name: "Chelsey Dietrich", username: "Kamren", email: "Lucio_Hettinger@annie.ca", address: { street: "Skiles Walks", suite: "Suite 351", city: "Roscoeview", zipcode: "33263", geo: { lat: "-31.8129", lng: "62.5342" } }, phone: "(254)954-1289", website: "demarco.info", company: { name: "Keebler LLC", catchPhrase: "User-centric fault-tolerant solution", bs: "revolutionize end-to-end systems" } }, { id: 6, name: "Mrs. Dennis Schulist", username: "Leopoldo_Corkery", email: "Karley_Dach@jasper.info", address: { street: "Norberto Crossing", suite: "Apt. 950", city: "South Christy", zipcode: "23505-1337", geo: { lat: "-71.4197", lng: "71.7478" } }, phone: "1-477-935-8478 x6430", website: "ola.org", company: { name: "Considine-Lockman", catchPhrase: "Synchronised bottom-line interface", bs: "e-enable innovative applications" } }, { id: 7, name: "Kurtis Weissnat", username: "Elwyn.Skiles", email: "Telly.Hoeger@billy.biz", address: { street: "Rex Trail", suite: "Suite 280", city: "Howemouth", zipcode: "58804-1099", geo: { lat: "24.8918", lng: "21.8984" } }, phone: "210.067.6132", website: "elvis.io", company: { name: "Johns Group", catchPhrase: "Configurable multimedia task-force", bs: "generate enterprise e-tailers" } }, { id: 8, name: "Nicholas Runolfsdottir V", username: "Maxime_Nienow", email: "Sherwood@rosamond.me", address: { street: "Ellsworth Summit", suite: "Suite 729", city: "Aliyaview", zipcode: "45169", geo: { lat: "-14.3990", lng: "-120.7677" } }, phone: "586.493.6943 x140", website: "jacynthe.com", company: { name: "Abernathy Group", catchPhrase: "Implemented secondary concept", bs: "e-enable extensible e-tailers" } }, { id: 9, name: "Glenna Reichert", username: "Delphine", email: "Chaim_McDermott@dana.io", address: { street: "Dayna Park", suite: "Suite 449", city: "Bartholomebury", zipcode: "76495-3109", geo: { lat: "24.6463", lng: "-168.8889" } }, phone: "(775)976-6794 x41206", website: "conrad.com", company: { name: "Yost and Sons", catchPhrase: "Switchable contextually-based project", bs: "aggregate real-time technologies" } }, { id: 10, name: "Clementina DuBuque", username: "Moriah.Stanton", email: "Rey.Padberg@karina.biz", address: { street: "Kattie Turnpike", suite: "Suite 198", city: "Lebsackbury", zipcode: "31428-2261", geo: { lat: "-38.2386", lng: "57.2232" } }, phone: "024-648-3804", website: "ambrose.net", company: { name: "Hoeger LLC", catchPhrase: "Centralized empowering task-force", bs: "target end-to-end models" } } ] console.log(dummyData[2].name); // Clementine Bauch alert(dummyData[5].company.name) // Considine-Lockman的单行:

re

打印:

import re

data = '''
ABCDBCADBADCBABDDACAABCDB
1#JHHHF##@@GGIHHHIII==DDS
ACBDAACBABDCCBBDCDBBADADA
ISHFIDH#H@1JD=@HHII##GG=H
CCCDDAABCCBABBADBADBAAABA
%%$$#@GGTTT&%MHTHWAIIHJWI
'''

print(re.findall(r'(?=(?:BAD))(?=(?:.{%s}(...)))' % (len(max(data.splitlines())) + 1), data, flags=re.DOTALL))

此正则表达式here的说明。