[英]Using python, how do you select a random row of a csv file?
我需要從 csv 文件中選擇一個隨機單詞,但我不知道如何開始。 所有單詞都在一列中,但我想獲得一個隨機行,以便我可以輸出一個隨機單詞。 有什么想法嗎?
如果您的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.