Estoy intentando imprimir líneas al azar desde un csv.
Digamos que el csv tiene las siguientes 10 líneas:
1,One
2,Two
3,Three
4,Four
5,Five
6,Six
7,Seven
8,Eight
9,Nine
10,Ten
Si escribo un código como el siguiente, imprime cada línea como una lista en el mismo orden que está presente en el CSV
import csv
with open("MyCSV.csv") as f:
reader = csv.reader(f)
for row_num, row in enumerate(reader):
print(row)
En cambio, me gustaría que fuera al azar.
Es solo una impresión por ahora. Más tarde pasaré cada línea como una Lista a una Función.
5 respuestas
Bueno, puede definir una lista, agregar todos los elementos del archivo csv en ella, luego barajarla e imprimirla, suponga que el nombre de esta lista es temp
import csv
import random
temp = []
with open("your csv file.csv") as file:
reader = csv.reader(file)
for row_num, row in enumerate(reader):
temp.append(row)
random.shuffle(temp)
for i in range(len(temp)):
print(temp[i])
¿Por qué mejor no usas pandas para manejar csv?
import pandas as pd
data = pd.read_csv("MyCSV.csv")
Y para obtener las muestras que busca, simplemente escriba:
data.sample() # print one sample
data.sample(5) # to write 5 samples
Además, si desea pasar cada línea a una función. data_after_function = data.appy(function_name)
y dentro de la función puedes convertir la línea en una lista con list()
¡Espero que esto ayude!
Un par de cosas para hacer:
- Almacenar CSV en una secuencia de algún tipo
- Obtenga los datos al azar
Para 1, probablemente sea mejor usar alguna forma de comprensión de secuencia (he elegido tuplas anidadas en una lista, ya que parece que quieres los números de fila y no podemos usar diccionarios para barajar).
Podemos usar el módulo random
para el número 2.
import random
import csv
with open("MyCSV.csv") as f:
reader = csv.reader(f)
my_csv = [(row_num, row) for row_num, row in enumerate(reader)]
# get only 1 item from the list at random
random_row = random.choice(my_csv)
# randomise the order of all the rows
shuffled_csv = random.shuffle(my_csv)
Esto debería funcionar. Puede reutilizar la lista lines
en su código a medida que se baraja.
import random
with open("tmp.csv", "r") as f:
lines = f.readlines()
random.shuffle(lines)
print(lines)
import csv
import random
csv_elems = []
with open("MyCSV.csv") as f:
reader = csv.reader(f)
for row_num, row in enumerate(reader):
csv_elems.append(row)
random.shuffle(csv_elems)
print(csv_elems[0])
Como puede ver, solo estoy imprimiendo el primer elemento, puede iterar sobre la lista, seguir barajando e imprimir
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.