簡體   English   中英

使用python,你如何選擇一個csv文件的隨機行?

[英]Using python, how do you select a random row of a csv file?

我需要從 csv 文件中選擇一個隨機單詞,但我不知道如何開始。 所有單詞都在一列中,但我想獲得一個隨機行,以便我可以輸出一個隨機單詞。 有什么想法嗎?

使用randomcsv模塊。

如果您的csv文件足夠小以適合內存,您可以閱讀整個內容然后選擇一行:

import csv
import random

with open(filename) as f:
    reader = csv.reader(f)
    chosen_row = random.choice(list(reader))

您必須一次讀入整個文件,因為choice需要知道有多少行。

如果您樂於對數據進行多次傳遞,則可以計算行數,然后選擇隨機行並再次讀入文件直到該行:

with open(filename) as f:
    lines = sum(1 for line in f)
    line_number = random.randrange(lines)

with open(filename) as f:
    reader = csv.reader(f)
    chosen_row = next(row for row_number, row in enumerate(reader)
                      if row_number == line_number)

如果您想增量地、隨機地選擇一行,而不知道會有多少行,您可以使用水庫采樣 這可能會更慢,因為它會做出多個隨機選擇,直到用完行,但一次只需要內存中的一行:

with open(filename) as f:
    reader = csv.reader(f)
    for index, row in enumerate(reader):
        if index == 0:
            chosen_row = row
        else:
            r = random.randint(0, index)
            if r == 0:
                chosen_row = row

你可以使用熊貓:

import pandas as pd
csvfile = pd.read_csv('/your/file/path/here')
print csvfile.sample()

由於您聲明所有單詞都在一列中,因此可以更輕松地解析文件。 這是我的解決方案:

import random

with open('random_word_from_file.txt') as f:
    words = f.read().split()
    my_pick = random.choice(words)
    print my_pick

筆記

  • 在這個解決方案中,我假設文件的大小合理地適合內存
  • 我使用f.read().split()而不是f.readlines()因為后者不會從單詞中去除換行符
  • 一旦有了單詞列表,就可以調用random.choice()隨機選擇一個

edwEFefWEFEFeefEf

f F fE FFWf EF ef EFWFwfw effE f FefFfEFefEFwefFE我們的代碼適用於對計算機科學一無所知的華夫餅干

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM