Могу ли я печатать строки случайным образом из CSV в Python? - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь распечатать строки случайным образом из CSV.

Допустим, CSV имеет следующие 10 строк -

1,One
2,Two
3,Three
4,Four
5,Five
6,Six
7,Seven
8,Eight
9,Nine
10,Ten

Если я напишу код, как показано ниже, он печатает каждыйстрока в виде списка в том же порядке, что и в CSV

import csv

with open("MyCSV.csv") as f:
    reader = csv.reader(f)
    for row_num, row in enumerate(reader):
        print(row)

Вместо этого я бы хотел, чтобы он был случайным.

Пока это просто распечатка. Позже я передам каждую строку в виде списка в функцию.

Ответы [ 5 ]

1 голос
/ 04 октября 2019
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])

Как видите, я просто печатаю первый элемент, вы можете перебирать список, продолжать перемешивать и печатать

1 голос
/ 04 октября 2019

Это должно работать. Вы можете повторно использовать список lines в своем коде, так как он перемешан.

import random

with open("tmp.csv", "r") as f:
    lines = f.readlines()

random.shuffle(lines)
print(lines)
0 голосов
/ 04 октября 2019

Пара вещей, которые нужно сделать:

  1. Хранить CSV в какой-то последовательности
  2. Получить данные случайным образом

Для 1 это, вероятно, вероятноЛучше всего использовать некоторую форму понимания последовательности (я использовал вложенный кортеж в списке, поскольку кажется, что вам нужны номера строк, а мы не можем использовать словари для случайного перемешивания).

Мы можем использовать random модуль для номера 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 голосов
/ 04 октября 2019

Ну, вы можете определить список, добавить в него все элементы csv-файла, затем перемешать его и распечатать, предположив, что имя этого списка 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 голосов
/ 04 октября 2019

Почему бы вам лучше не использовать панд для обработки CSV?

import pandas as pd

data = pd.read_csv("MyCSV.csv")

И чтобы получить образцы, которые вы ищете, просто напишите:

data.sample() # print one sample data.sample(5) # to write 5 samples

Также, если вы хотите передать каждую строку функции. data_after_function = data.appy(function_name) и внутри функции вы можете преобразовать строку в список с помощью list()

Надеюсь, это поможет!

...