Extrahieren Sie nur Zeilen, die keine bestimmte Zeichenfolge enthalten.
In einem solchen Fall ist Pythons `` `in``` praktisch.
Ob eine bestimmte Zeichenfolge A die Zeichenfolge B enthält oder nicht, kann durch die folgende Syntax bestimmt werden.
[String B.] in [Zeichenfolge A.]
Der Rückgabewert ist ein logischer Wert.
Verwenden Sie `` `in```, um nur die Zeilen zu extrahieren, die keine bestimmte Zeichenfolge enthalten.
Angenommen, Sie möchten nur die Zeilen aus dem folgenden Satz abrufen, die kein bestimmtes Wort enthalten.
example.txt
Auf dem Schreibtisch liegt ein Apfel.
Auf dem Schreibtisch liegt ein Apfel.
There is an apple on the table.
Auf dem Schreibtisch liegt eine Banane.
Auf dem Schreibtisch liegt eine Banane.
There is a banana on the table.
Die Liste der Wörter, die Sie ausschließen möchten, lautet wie folgt.
filter.txt
Apfel
apple
Banane
Das Skript in einem solchen Fall lautet wie folgt.
fitrHavingLine.py
#!/usr/local/bin/python3
# -*- coding: utf-8 -*-
"""
Geben Sie eine Zeile aus, die keine Daten in der Referenzdatei enthält.
"""
__author__ = "Kazuki Nakamae <[email protected]>"
__version__ = "0.00"
__date__ = "2 Jun 2017"
import sys
def fitrHavingLine(infn,reffn,outfn):
"""
@function fitrHavingLine();
Geben Sie eine Zeile aus, die keine Daten in der Referenzdatei enthält.
@param {string} infn :Eingabedatei
@param {string} refdir :Referenzdatei
@param {string} outfn :Ausgabedatei
"""
inf = open(infn, 'r')
for infline in inf:
isNothing = True
ref = open(reffn, 'r')
#Setzen Sie das Urteil auf False, wenn die Zeichenfolge in der Referenzdatei vorhanden ist
for refline in ref:
if refline.strip() in infline:
isNothing=False
break
ref.close()
if isNothing:
outf = open(outfn, 'a')
outf.write(infline)
outf.close()
inf.close()
if __name__ == '__main__':
argvs = sys.argv
argc = len(argvs)
if (argc != 4): #Argumentprüfung
print("USAGE : python3 fitrHavingLine.py <INPUT FILE> <REFERENCE FILE> <OUTPUT FILE>")
quit()
fitrHavingLine(argvs[1],argvs[2],argvs[3])
quit()
Geben Sie Folgendes in bash ein:
python3 fitrHavingLine.py example.txt filter.txt out.txt
Die Ausgabe ist wie folgt.
out.txt
Auf dem Schreibtisch liegt ein Apfel
Auf dem Schreibtisch liegt eine Banane
There is a banana on the table.
if refline.strip() in infline:
isNothing=False
break
Im Gegenteil, wenn Sie den Teil von ändern, ist es möglich, die Zeile zu verarbeiten, die ein bestimmtes Zeichen oder nur eine bestimmte Zeile enthält.
Dies kann nützlich sein, wenn Sie Daten mit verschiedenen Elementen wie CSV-Dateien verarbeiten.
das ist alles. Vielen Dank.
Recommended Posts