从csv文件的一行获取一条信息

时间:2017-07-31 18:51:12

标签: python csv

我有一个csv文件,如下所示:

name1, id1, email1, uID1
name2, id2, email2, uID2
name3, id3, email3, uID3
name4, id4, email4, uID4
name5, id5, email5, uID5
name6, id6, email6, uID6

我想从中随机收到一封电子邮件。对于前者我想要email4,只有email4。我该怎么看?我不想要name4 id4和uID4,只需发送电子邮件4。

注意:我正在编写一个方法来执行此操作,并希望返回email4而不是打印它。

我已经看到了很多关于如何获得整行或整列的信息,但没有看到如何获得一行的信息。我该怎么做?

我已查看并尝试了此主题的所有选项:How can I get a specific field of a csv file? 但答案对我不起作用。因此,他们的解决方案的新解决方案或解决方案将非常棒!

这是我目前所处的位置:

num = random.randint(1,11)
    with open('Accounts_details.csv', 'rb') as f:
        reader = csv.reader(f)
        reader = list(reader)
        text = reader[num][2]
        print(text)

这会引发错误:

 reader = list(reader)
_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)

3 个答案:

答案 0 :(得分:0)

pandas可能是解决此问题的最简单方法。从你的帖子中不清楚你是想要一个特定的领域还是一个随机领域,但两者都非常简单。

import pandas as pd
df = pd.read_csv(<your_file>)

print(df.iloc[4]['email'])

您可以随机生成4并使用该索引进行索引,也可以直接使用random.sample中的pandas进行索引。

答案 1 :(得分:0)

您将其作为文本文件打开。

此:

with open('Accounts_details.csv', 'rb') as f:  

应该是这样的:

with open('Accounts_details.csv', 'r') as f:  

答案 2 :(得分:-1)

您可以使用numpy-library,完整示例:

import io
import numpy as np

test = """name1, id1, email1, uID1
name2, id2, email2, uID2
name3, id3, email3, uID3
name4, id4, email4, uID4
name5, id5, email5, uID5
name6, id6, email6, uID6"""

with open("test.txt", "w") as f:
    f.write(test)

data = np.genfromtxt("test.txt", delimiter="," ,dtype='unicode', autostrip=True)
# np.random.choice(data[:,2]) <-- random choice
data[:,2][4] # <--- index

更新:numpy和pandas之间的时间比较

%timeit np.genfromtxt("test.txt", delimiter="," ,dtype='unicode', autostrip=True)
# 1000 loops, best of 3: 404 µs per loop

%timeit pd.read_csv("test.txt", header=None, skipinitialspace=True)
1000 loops, best of 3: 954 µs per loop