Я пытаюсь найти несколько строк в файле, но line.find() не возвращает true для любой строки в файле. Пожалуйста, попробуйте что-нибудь предложить. Поиск должен быть последовательный, и мне нужно сохранить значение смещения для каждой найденной строки. и поиск следующей строки должен начинаться с этого смещения.Файл I/O python
def CheckFile(*argv):
import os
Filename = argv[0]
Search = argv[1]
Flag = False
FileFlag = False
offset1 = 0
offset2 = 0
if os.path.exists(Filename) == 0:
return "File Doesn't exist", 1
else:
fh = open(Filename,"r")
for line in fh:
if Search in line:
print "Success"
print (line)
Flag = True
offset1 = fh.tell()
#offset1 = int(offset1)
break
else:
fh.close()
return "Could not find String %s"%(Search), 1
#fh.close()
if Flag:
fh = open(Filename,"r")
print(offset1)
fh.seek(offset1)
for line in fh:
if "TestDir1\TestFile1.txt" in line:
print "Success"
print (line)
FileFlag = True
offset2 = fh.tell()
#offset2 = int(offset2)
break
else:
fh.close()
return "Couldn't Find File TestDir1\TestFile1.txt", 1
#fh.close()
if Flag and FileFlag:
fh = open(Filename,"r")
print(offset2)
fh.seek(offset2)
for line in fh:
if "Persistent Handle: True" in line:
print "Success"
return "Success -- Found the strings", 0
else:
fh.close()
return "Failur -- Failed to find 'Persistent Handle: True'", 1
вывод:
>>> CheckFile("D:\wireshark.txt","NetBIOS")
('Could not find String NetBIOS', 1)
Вот пример файл:
> [SEQ/ACK analysis]
> [This is an ACK to the segment in frame: 104]
> [The RTT to ACK the segment was: 0.043579000 seconds]
> [Bytes in flight: 252]
>NetBIOS Session Service
> Message Type: Session message (0x00)
> Length: 248
>SMB2 (Server Message Block Protocol version 2)
> SMB2 Header
> Server Component: SMB2
> Header Length: 64
> Credit Charge: 1
> Channel Sequence: 0
Reserved: 0000
Command: Create (5)
Credits requested: 1
Flags: 0x00000000
Какие строки вы ищете, в каком вводе? – millimoose
Также подумайте о том, чтобы сделать ваш код менее спагетти. Это было бы проще отладить, если вы разделили код на файл ввода-вывода (открыть файл, проверить его существование, yadda blah) и алгоритм поиска (который принимает только итератор по строкам или по строкам/смещениям). Таким образом, вы могли бы по крайней мере локализовать свою ошибку вместо того, чтобы сбросить стену кода на SO. – millimoose
Я забираю строку с именем «NETBIOS» и существует в файле. Я тоже должен приложить файл. Я новичок и до сих пор учился! – user2781569