write una txt texto partir open lista importar guardar funcion escribir editar crear como archivos archivo python

una - funcion write python



¿Cómo buscar una cadena en archivos de texto? (9)

Aquí hay otra manera de responder posiblemente su pregunta usando la función de búsqueda que le da un valor numérico literal de donde algo realmente es

open(''file'', ''r'').read().find('''')

en find escribe la palabra que quieres encontrar y ''file'' significa tu nombre de archivo

Quiero verificar si una cadena está en un archivo de texto. Si es así, haz X. Si no es así, haz Y. Sin embargo, este código siempre devuelve True por algún motivo. ¿Alguien puede ver lo que está mal?

def check(): datafile = file(''example.txt'') found = False for line in datafile: if blabla in line: found = True break check() if True: print "true" else: print "false"


Cómo buscar el texto en el archivo y Devuelve una ruta de archivo en la que se encuentra la palabra (Как искать часть текста в файле и возвращять пайлу в котором это слово найдено)

import os import re class Searcher: def __init__(self, path, query): self.path = path if self.path[-1] != ''/'': self.path += ''/'' self.path = self.path.replace(''/'', ''//') self.query = query self.searched = {} def find(self): for root, dirs, files in os.walk( self.path ): for file in files: if re.match(r''.*?/.txt$'', file) is not None: if root[-1] != ''//': root += ''//' f = open(root + file, ''rt'') txt = f.read() f.close() count = len( re.findall( self.query, txt ) ) if count > 0: self.searched[root + file] = count def getResults(self): return self.searched

En Main ()

# -*- coding: UTF-8 -*- import sys from search import Searcher path = ''c://temp//' search = ''search string'' if __name__ == ''__main__'': if len(sys.argv) == 3: # создаем объект поисковика и передаем ему аргументы Search = Searcher(sys.argv[1], sys.argv[2]) else: Search = Searcher(path, search) # начать поиск Search.find() # получаем результат results = Search.getResults() # выводим результат print ''Found '', len(results), '' files:'' for file, count in results.items(): print ''File: '', file, '' Found entries:'' , count


Como dijo Jeffrey Said, no estás verificando el valor del check() . Además, su función check() no devuelve nada. Tenga en cuenta la diferencia:

def check(): datafile = file(''example.txt'') found = False #this isn''t really necessary for line in datafile: if blabla in line: #found = True #not necessary return True return False #because you finished the search without finding anything print check()


Dos problemas:

  1. Tu función no devuelve nada; una función que no devuelve nada explícitamente devuelve None (que es falso)

  2. Verdadero siempre es verdadero: no está verificando el resultado de su función

.

def check(fname, txt): with open(fname) as dataf: return any(txt in line for line in dataf) if check(''example.txt'', ''blabla''): print "true" else: print "false"


Hice una pequeña función para este propósito. Busca una palabra en el archivo de entrada y luego la agrega al archivo de salida.

def searcher(outf, inf, string): with open(outf, ''a'') as f1: if string in open(inf).read(): f1.write(string)

  • outf es el archivo de salida
  • inf es el archivo de entrada
  • string es, por supuesto, la cadena deseada que desea encontrar y agregar a outf.

La función de check debe devolver el booleano found y usarlo para determinar qué imprimir.

def check(): datafile = file(''example.txt'') found = False for line in datafile: if blabla in line: found = True break return found found = check() if found: print "true" else: print "false"

el segundo bloque también podría condensarse para:

if check(): print "true" else: print "false"


Ya se ha proporcionado la razón por la que siempre obtuviste la True , así que solo te ofreceré otra sugerencia:

Si su archivo no es demasiado grande, puede leerlo en una cadena y simplemente usarlo (más fácil ya menudo más rápido que leer y verificar la línea por línea):

if ''blabla'' in open(''example.txt'').read(): print("true")

Otro truco: puede aliviar los posibles problemas de memoria utilizando mmap.mmap() para crear un objeto "de cadena" que utiliza el archivo subyacente (en lugar de leer todo el archivo en la memoria):

import mmap f = open(''example.txt'') s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) if s.find(''blabla'') != -1: print(''true'')

NOTA: en python 3, los mmaps se comportan como bytearray objetos en lugar de cadenas, por lo que la subsecuencia que busca con find() tiene que ser un objeto bytes lugar de una cadena, por ejemplo. s.find(b''blabla'') :

#!/usr/bin/env python3 import mmap with open(''example.txt'', ''rb'', 0) as file, / mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) as s: if s.find(b''blabla'') != -1: print(''true'')

También puede usar expresiones regulares en mmap , por ejemplo, búsqueda insensible a mayúsculas / minúsculas: if re.search(br''(?i)blabla'', s):


found = False

def check(): datafile = file(''example.txt'') for line in datafile: if blabla in line: found = True break return found if check(): print "true" else: print "false"


if True: print "true"

Esto siempre sucede porque Verdadero siempre es Verdadero.

Quieres algo como esto:

if check(): print "true" else: print "false"

¡Buena suerte!