1

この解決策に対する答えが見つからなかったので、それを理解したら、解決策を再投稿すると思いました...

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
4

2 に答える 2

3

私はあなたの 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...
于 2012-09-14T11:15:02.900 に答える
1

私がこれを行った方法は次のとおりです。

import sys
import csv
#define user input as variable
input = sys.argv[1]
# read csv file into "fooReader"
fooReader = csv.reader(open('test1.csv', 'rb'), delimiter = ',', quotechar="\"")
# read each row in "fooReader"
for row in fooReader:
        # define first row column as "value" for testing
        value = row[0]
        # test if value (1st column) is the same as input (user input)
        if value == input:
                # ...if it is then print the 5th column in a certain way
                print value + " = " + row[4]

row[4]これは、必要な別のテストで変数として割り当てるために使用できます。

于 2012-09-14T10:47:38.853 に答える