Sono su Python 2.7.1 e sto cercando di identificare tutti i file di testo che non lo fanno contengono una certa stringa di testo.Trova tutto il testo non file contenenti una stringa di testo
Inizialmente il programma sembrava funzionare, ma ogni volta che aggiungo la stringa di testo a un file, continua ad apparire come se non lo contenga (falso positivo). Quando controllo il contenuto del file di testo, la stringa è chiaramente presente.
Il codice ho provato a scrivere è
def scanFiles2(rdir,sstring,extens,start = '',cSens = False):
fList = []
for fol,fols,fils in os.walk(rdir):
fList.extend([os.path.join(rdir,fol,fil) for fil in fils if fil.endswith(extens) and fil.startswith(start)])
if fList:
for fil in fList:
rFil = open(fil)
for line in rFil:
if not cSens:
line,sstring = line.lower(), sstring.lower()
if sstring in line:
fList.remove(fil)
break
rFil.close()
if fList:
plur = 'files do' if len(fList) > 1 else 'file does'
print '\nThe following %d %s not contain "%s":\n'%(len(fList),plur,sstring)
for fil in fList:
print fil
else:
print 'No files were found that don\'t contain %(sstring)s.'%locals()
scanFiles2(rdir = r'C:\temp',sstring = '!!syn',extens = '.html', start = '#', cSens = False)
Penso che c'è un difetto nel codice, ma io davvero non lo vedo.
UPDATE
Il codice viene ancora con molti falsi positivi: i file che fare contengono la stringa di ricerca, ma sono identificati come non lo contengono.
Potrebbe codificare il codice ? Ho prefisso la stringa di ricerca con U
per tenere conto della codifica Unicode ma non ha fatto alcuna differenza.
Python in qualche modo cache contenuto del file? Io non la penso così ma questo potrebbe in qualche modo rendere conto che i file continuano a comparire dopo essere stati corretti.
Potrebbe qualche tipo di virus causare sintomi come questi? Sembra altamente improbabile per me, ma sono piuttosto disperata per farlo correggere.
ho provato così com'è e funziona per me (appena modificato "extens" e "rdir" per abbinare il mio attuale env) –
@le_vine: è fantastico ma per me include ancora una manciata di file che ** ** includi la stringa di ricerca. Dovrei aggiungere che la stringa di ricerca è stata recentemente aggiunta a loro. Qualche idea su cosa potrebbe succedere? Come se Python ottenga il contenuto del file dalla cache anziché dal disco o qualcosa del genere ... – RubenGeert
La convenzione di denominazione utilizzata nel codice non è la migliore. Ci sono troppe 'fil',' fLi' nel codice. Prova a leggere il codice ad alta voce. Prova ad usare i nomi della documentazione per le funzioni corrispondenti, ad es. 'Dirpath, dirnames, nomi di file' invece di' fol, fols, fils' – jfs