2017-04-18 212 views
-2

我需要從csv文件中選擇一個隨機單詞,我只是不知道如何開始它。所有的單詞都在一列中,但我想要得到一個隨機行,以便輸出一個隨機單詞。有什麼想法嗎?使用python,你如何選擇一個csv文件的隨機行?

+3

使用[**'random' **]( https://docs.python.org/2/library/random.html)和[**'csv' **](https://docs.python.org/2/library/csv.html)模塊。 –

+0

我會統計行數。從這個隨機整數可以在1到行數的範圍內生成。 完成此操作後,只需在該行讀取關閉的單詞? – CodeCupboard

+1

如果文件太大而無法一次讀入內存,則可以使用[resevoir sampling](http://stackoverflow.com/questions/9690009/pick-n-items-at-random-from-sequence-of -Unknown長度)。 –

回答

2

你可以使用熊貓:

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

既然你說,所有的話都在一列,這使得它更容易解析該文件。這裏是我的解決方案:

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()隨機挑一個
2

使用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) 

如果你想增量和隨機選擇一行,但不知道有多少行,您可以使用reservoir sampling。這可能會比較慢,因爲它會進行多個隨機選擇,直到它耗盡行,但一次只需要一行內存:

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 
+1

很好的方法來計算文件中的行數。 –