我有一个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?)
答案 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