Isi berkas:

abc 
Swan
abc2
Swan
abc3

... Bagaimana menguji untuk melihat apakah "Angsa" ada, tetapi hanya sebelum "abc2" (dengan Python)

(Posting pertama, jadi mohon maafkan sedikit ketidaktahuan

-2
Mr.Rick 14 Januari 2022, 10:19
3
Bagian mana yang Anda kesulitan? Membaca file? Melewati garis? Memeriksa apakah suatu garis memiliki nilai tertentu? Berhenti mengulang jika Anda menemukan nilai tertentu? Silakan bagikan kode Anda dan jelaskan masalah apa yang sebenarnya Anda alami.
 – 
Grismar
14 Januari 2022, 10:21
Selamat datang di Stack Overflow. Apakah Anda menulis kode yang melihat file satu baris pada satu waktu? Apakah Anda mencoba memeriksa apakah baris saat ini adalah "Swan", dan kemudian memeriksa apakah baris berikutnya adalah "abc2"? Secara spesifik apa yang menurut Anda sulit?
 – 
Karl Knechtel
14 Januari 2022, 10:53

4 jawaban

Seseorang dapat menggunakan ini:

txt = '''
abc 
Swan
abc2
Swan
abc3
'''

import re

if re.search(r'Swan\nabc2', txt, re.M):
    print('True')

Ini akan terlihat jika ada suatu tempat di teks Swan dan di suatu tempat (tidak langsung) di belakangnya harus ada abc2.

Jika Anda mencari per baris, Anda dapat mengulang baris:

lst_txt = txt.split('\n')
for line, lineafter in zip(lst_txt[:-1], lst_txt[1:]):
    if line == 'Swan' and lineafter == 'abc2':
        print('True')
1
3DspatialUser 14 Januari 2022, 10:23

Jika Anda memiliki data dari file sebagai string, Anda dapat membaginya menjadi beberapa baris, jika dalam baris, maka ubah saja menjadi daftar semua baris. Anda kemudian dapat menggunakan list.index() untuk menemukan baris nilai yang muncul dan membandingkannya dengan nilai lain seperti:

testStr = """abc 
Swan
abc2
Swan
abc3"""

lines = testStr.splitlines()

print(lines.index('Swan'))
print(lines.index('abc2'))
if lines.index('Swan') < lines.index('abc2'):
    print('Swan comes before abc2')

Keluaran mana:

1
2
Swan comes before abc2
0
ZXYNINE 14 Januari 2022, 10:27

Jika file adalah file txt, ini bisa menjadi caranya. ex) nama file : content.txt

with open('content.txt', 'r') as f:
    r = f.readlines()
    for i, val in enumerate(r):
        word = val.replace('\n', '')
        if val == 'Swan':
            print('Position of Swan :', i)
        elif val == 'abc2':
            print('Position of abc2 :', i)
            break
0
Desty 14 Januari 2022, 10:32

x_before_y mengulangi melalui iterable (mis. daftar) dan mengembalikan True segera setelah menemukan string x yang muncul sebelum string y.

def x_before_y(x, y, iterable):
    for i, el in enumerate(iterable):
        if el == y and iterable[i-1] == x:
            return True
    return False

lines = ["x", "Swan", "abc2", "x", "Swan"]
x_before_y("Swan", "abc2", lines) #  True
x_before_y("abc2", "Swan", lines) #  False
0
zwithouta 14 Januari 2022, 10:35