¿Podría alguien mostrarme cómo podría leer un número aleatorio de líneas de un archivo en Python?Lee un número de líneas aleatorias de un archivo en Python
Respuesta
Su requisito es un poco vago, así que aquí tiene otro método ligeramente diferente (en busca de inspiración si no otra cosa):
from random import random
lines = [line for line in open("/some/file") if random() >= .5]
En comparación con las otras soluciones, el número de las líneas varía menos (distribución alrededor de la mitad del número total de líneas), pero cada línea se elige con un 50% de probabilidad, y solo se requiere una pasada a través del archivo.
+1 Me gusta mucho esta solución. – aaronasterling
¿Cuál es el significado de 'random.random()> .5' aquí? – user225312
'random()' devuelve un número aleatorio entre 0 y 1 con una distribución uniforme. 'random()> .5' será verdadero la mitad del tiempo ± una distribución normal, es decir, cada línea se selecciona con un 50% de probabilidad. – SimonJ
import os,random
def getrandfromMem(filename) :
fd = file(filename,'rb')
l = fd.readlines()
pos = random.randint(0,len(l))
fd.close()
return (pos,l[pos])
def getrandomline2(filename) :
filesize = os.stat(filename)[6]
if filesize < 4096 : # Seek may not be very useful
return getrandfromMem(filename)
fd = file(filename,'rb')
for _ in range(10) : # Try 10 times
pos = random.randint(0,filesize)
fd.seek(pos)
fd.readline() # Read and ignore
line = fd.readline()
if line != '' :
break
if line != '' :
return (pos,line)
else :
getrandfromMem(filename)
getrandomline2("shaks12.txt")
también puede marcar http://www.bryceboe.com/2009/03/23/random-lines-from-a-file/ –
Suponiendo que el desplazamiento es siempre al principio del archivo:
import random
lines = file('/your/file').read().splitlines()
n_lines = random.randrange(len(lines))
random_lines = lines[:n_lines]
Tenga en cuenta que esto va a leer todo el archivo en la memoria.
esto solo devolverá las primeras n líneas. – aaronasterling
import linecache
import random
import sys
# number of line to get.
NUM_LINES_GET = 5
# Get number of line in the file.
with open('file_name') as f:
number_of_lines = len(f.readlines())
if NUM_LINES_GET > number_of_lines:
print "are you crazy !!!!"
sys.exit(1)
# Choose a random number of a line from the file.
for i in random.sample(range(1, number_of_lines+1), NUM_LINES_GET)
print linecache.getline('file_name', i)
linecache.clearcache()
Eso no es un número aleatorio de líneas. – aaronasterling
@aaronasterling: ¿ehh? Tal vez no entendí bien la pregunta, pero pidió un número aleatorio de líneas, no los números de una línea al azar, ¿verdad? – mouad
siempre devuelve 5 líneas, y 5 no es muy aleatorio :) Pero estoy de acuerdo, la pregunta era vaga. – SimonJ
para obtener un número de líneas al azar de su archivo se podría hacer algo como lo siguiente:
import random
with open('file.txt') as f:
lines = random.sample(f.readlines(),5)
El ejemplo anterior devuelve 5 líneas, pero se puede cambiar fácilmente que hasta el número que desee. También puede cambiarlo a randint()
para obtener un número aleatorio de líneas además de una cantidad de líneas aleatorias, pero debe asegurarse de que el tamaño de la muestra no sea mayor que el número de líneas del archivo. Dependiendo de su entrada, esto puede ser trivial o un poco más complejo.
Tenga en cuenta que las líneas podrían aparecer en lines
en un orden diferente al que aparecen en el archivo.
- 1. lee un archivo en una matriz de líneas en d
- 2. Seleccionar líneas aleatorias de un archivo en bash
- 3. Lee un número indefinido de líneas desde la entrada estándar
- 4. contando el número de líneas en un archivo de texto
- 5. C# ¿Cómo saltear el número de líneas mientras lee un archivo de texto usando Stream Reader?
- 6. Contar el número de líneas en un archivo txt con Python excluyendo las líneas en blanco
- 7. Lee un archivo del servidor con ssh usando python
- 8. Node.js: Cuente el número de líneas en un archivo
- 9. Recuperar el número total de líneas en un archivo
- 10. Consultas aleatorias en un archivo xml grande
- 11. ¿Cuenta la longitud (número de líneas) de un archivo CSV?
- 12. ¿Lee un archivo al revés?
- 13. ¿Cómo puedo obtener exactamente n líneas aleatorias de un archivo con Perl?
- 14. ¿Lee el contenido de un objeto "archivo"?
- 15. Lee n líneas en [String]
- 16. número de líneas visibles de un TextBlock
- 17. Lee un archivo binario en una matriz
- 18. Número de líneas en csv.DictReader
- 19. Python no lee todo el archivo de texto
- 20. Generación de cadenas de texto aleatorias de un patrón determinado
- 21. py3k: ¿Cómo se lee un archivo dentro de un archivo zip como texto, no como bytes?
- 22. Cómo realizo lecturas aleatorias de un archivo UTF8
- 23. Cadenas aleatorias en Python 2.6 (¿Está bien?)
- 24. Número de salida de líneas en un archivo de texto a la pantalla en Unix
- 25. bash pull ciertas líneas de un archivo
- 26. Cómo WordPress lee las líneas de comentarios
- 27. cuenta el número de líneas en el archivo - Scala
- 28. Encontrar el número de líneas en un proyecto con powershell
- 29. Python: ¿cómo leer un archivo con líneas delimitadas NUL?
- 30. ¿Cómo se lee un byte de archivo por byte en Python y cómo imprimir un bytelist como un binario?
¿Cuál es el rango "un número aleatorio de líneas"? ¿El desplazamiento también es aleatorio? –
"Un número de líneas aleatorias" y "un número aleatorio de líneas" son cosas muy diferentes. –