Extrayez uniquement les lignes qui ne contiennent pas de chaîne spécifique.
Dans un tel cas, le in
de python est pratique.
Le fait qu'une certaine chaîne de caractères A contienne ou non la chaîne de caractères B peut être déterminé par la syntaxe suivante.
[Chaîne B] in [Chaîne A]
La valeur de retour est une valeur logique.
Utilisez in
pour extraire uniquement les lignes qui ne contiennent pas de chaîne particulière.
Par exemple, supposons que vous souhaitiez obtenir uniquement les lignes qui ne contiennent pas un mot spécifique de la phrase suivante.
example.txt
Il y a une pomme sur le bureau.
Il y a une pomme sur le bureau.
There is an apple on the table.
Il y a une banane sur le bureau.
Il y a une banane sur le bureau.
There is a banana on the table.
La liste des mots que vous souhaitez exclure est la suivante.
filter.txt
pomme
apple
banane
Le script dans un tel cas est le suivant.
fitrHavingLine.py
#!/usr/local/bin/python3
# -*- coding: utf-8 -*-
"""
Sortez une ligne qui ne contient pas de données sur le fichier de référence.
"""
__author__ = "Kazuki Nakamae <[email protected]>"
__version__ = "0.00"
__date__ = "2 Jun 2017"
import sys
def fitrHavingLine(infn,reffn,outfn):
"""
@function fitrHavingLine();
Sortez une ligne qui ne contient pas de données sur le fichier de référence.
@param {string} infn :Fichier d'entrée
@param {string} refdir :Fichier de référence
@param {string} outfn :Fichier de sortie
"""
inf = open(infn, 'r')
for infline in inf:
isNothing = True
ref = open(reffn, 'r')
#Définissez le jugement sur False si la chaîne de caractères du fichier de référence existe
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): #Vérification des arguments
print("USAGE : python3 fitrHavingLine.py <INPUT FILE> <REFERENCE FILE> <OUTPUT FILE>")
quit()
fitrHavingLine(argvs[1],argvs[2],argvs[3])
quit()
Entrez ce qui suit dans bash:
python3 fitrHavingLine.py example.txt filter.txt out.txt
La sortie est la suivante.
out.txt
Il y a une pomme sur le bureau
Il y a une banane sur le bureau
There is a banana on the table.
if refline.strip() in infline:
isNothing=False
break
Au contraire, si vous modifiez la partie de, il sera possible de traiter la ligne contenant un caractère spécifique ou seulement une ligne spécifique.
Cela peut être utile lors de la gestion de données avec divers éléments tels que des fichiers csv.
c'est tout. Merci beaucoup.
Recommended Posts