Tengo un archivo txt
del que quiero exportar todas las palabras que comienzan con 'F' o 'f' con el uso de la lista de comprensión y comando split()
.
count = []
with open('data.txt','r') as myfile:
count = [line for line in myfile.split() if (line[0]=='F' or line[0]=='f')]
print(count)
Y tomo el siguiente error
El objeto '_io.TextIOWrapper' no tiene el atributo 'split'
Por lo tanto, ¿hay alguna otra forma de utilizar la comprensión de la lista y la división del comando para obtener el resultado deseado?
4 respuestas
Desea dividir las cadenas de línea, no el objeto de archivo (del que lee las cadenas):
with open('data.txt','r') as myfile:
count = [word
for line in myfile
for word in line.split()
if word.lower().startswith('f')]
print(count)
Los sucesivos bucles for en la lista de comprensión efectivamente aplanan el archivo a una lista de (f-) palabras. Si no estás interesado en las palabras mismas y solo quieres contar, puedes hacer
with open('data.txt','r') as myfile:
# This works because bool inherits int, and True acts like 1, False like 0
count = sum(word.lower().startswith('f')
for line in myfile
for word in line.split())
print(count)
Finalmente, si desea todos los recuentos, use un Counter
:
from collections import Counter
with open('data.txt','r') as myfile:
count = Counter(word.lower()[0]
for line in myfile
for word in line.split())
print(count['f'])
Puedes probar esto,
Script Python
count = []
with open('data.txt','r') as myfile:
# remove len if you only need the words starting with `f`
count = len([word for word in myfile.read().replace("\n"," ").split(" ") if word.lower()[0] == "f"])
print(count)
Archivo de entrada
Sample line inside a File which is a File
Another line in the file with the word File
Salida
4
Véalo en acción aquí
Puede reemplazar if word.lower()[0] == "f"
con if word[0] == "f" or word[0] == "F"
También puede concatenar las líneas de su texto y luego usar split () para iterar sobre las palabras.
lines = []
with open("text.txt", "r") as fin:
lines = "".join(fin.readlines())
count = [w for w in lines.split() if w[0].lower() == 'f']
Con este archivo de entrada:
friday code floor funk
Y este código:
f_words = []
with open('words.txt') as myfile:
f_words = [word for word in myfile.read().split(" ") if word[0].lower() == 'f']
print(f_words)
Me sale esta salida:
['friday', 'floor', 'funk']