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.

0
Manu Manjunath 4 oct. 2019 a las 12:49

5 respuestas

La mejor respuesta

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])
0
Mohsen_Fatemi 4 oct. 2019 a las 09:58

¿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!

0
Alfonso 4 oct. 2019 a las 09:56

Un par de cosas para hacer:

  1. Almacenar CSV en una secuencia de algún tipo
  2. 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)
0
dijksterhuis 4 oct. 2019 a las 10:11

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)
1
ImranD 4 oct. 2019 a las 09:58
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

1
Sawant Sharma 4 oct. 2019 a las 10:01
58233922