Python:使用变量作为 CSV 中的查找引用并返回值

标签 python csv lookup

无法找到此解决方案的答案,因此一旦我弄清楚了,我想我应该重新发布我的解决方案......

我正在寻找一种获取用户输入 (sys.argv[1]) 并使用该值在 CSV 文件中查找 x 列中的另一个值(例如 5 )。这将是一个更大脚本的一部分,我将使用查找到的值作为测试。

我的 csv 示例是:

col0,col1,col2,col3,col4
a,foo,bar,blah,1
b,foo,bar,blah,2
c,foo,bar,blah,3
d,foo,bar,blah,4
e,foo,bar,blah,5
f,foo,bar,blah,6
g,foo,bar,blah,7
h,foo,bar,blah,8
i,foo,bar,blah,9
j,foo,bar,blah,10
k,foo,bar,blah,11
l,foo,bar,blah,12
m,foo,bar,blah,13
n,foo,bar,blah,14
o,foo,bar,blah,15
p,foo,bar,blah,16
q,foo,bar,blah,17
r,foo,bar,blah,18
s,foo,bar,blah,19
t,foo,bar,blah,20
u,foo,bar,blah,21
v,foo,bar,blah,22
w,foo,bar,blah,23
x,foo,bar,blah,24
y,foo,bar,blah,25
z,foo,bar,blah,26

最佳答案

我快速浏览了您的 Javascript 问题,如果您只映射字母表中的 char->position,那么以下怎么样?

def char_to_pos(char):
    from string import ascii_lowercase
    try:
        return ascii_lowercase.index(char) + 1
    except ValueError as e:
        pass # no match - do what's sensible here

如果您想预先生成一个查找表,则类似于:

from string import ascii_lowercase
from itertools import count

lookup = dict(zip(ascii_lowercase, count(1)))
# or depending on taste
lookup = {letter: idx for idx, letter in enumerate(ascii_lowercase, start=1)}

否则,由于 CSV 文件通常相对较小,您可以将整个文件加载到 RAM 中,以避免以后重复顺序查找(只要 CSV 不太大,就会使您的计算机陷入昏迷)

with open('test1.csv') as fin:
    csvin = csv.reader(fin)
    lookup = {row[0]: row for row in csvin}

to_find = 'x'
try:
    print '{} = {[4]}'.format(to_find, lookup[to_find])
except (KeyError, IndexError) as e:
    pass # KeyError = no lookup match, IndexError is that CSV file didn't have 5th column...

关于Python:使用变量作为 CSV 中的查找引用并返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12422968/

相关文章:

python - 如何排除负数?

excel - 是否有一个 Excel 函数将多个值相加,每个值乘以不同的查找值?

python - pandas 在包含间隔的列中查找值

python - 有什么方法可以像 django makemessage 一样生成 Tornado 本地化 CSV 文件吗?

python - 输出总是给出最后一行或所有行

r - 使用 R(或者 Excel)组合数据——循环匹配刺激

Python-MySQLdb问题: wrong ELF class: ELFCLASS32

python - UDP 聊天,服务器也可以聊天

python - 查找数据区间并对其进行排序

python - 多个 pandas.dataframe 到一个 csv 文件