0

プログラミングは比較的新しいので、Pythonを使って学習することにしたのはなぜですか。

現在、XLRDを使用してExcelスプレッドシートからユーザー名とパスワードのリストを読み取り、それらを使用して何かにログインしようとしています。その後、戻って次の行に進みます。ログインなどして続行します。

コードの一部を次に示します。

import xlrd
wb = xlrd.open_workbook('test_spreadsheet.xls')

# Load XLRD Excel Reader

sheetname = wb.sheet_names() #Read for XCL Sheet names
sh1 = wb.sheet_by_index(0) #Login

def readRows():
        for rownum in range(sh1.nrows):
                rows = sh1.row_values(rownum)
                userNm = rows[4]
                Password = rows[5]
                supID = rows[6]
                print userNm, Password, supID

print readRows()

私は変数を取得し、それらすべてを1回のショットで読み取ります。ここで、プログラミングスキルの欠如が問題になります。私はこれらを繰り返して何かをする必要があることを知っていますが、Imはベストプラクティスが何であるかについて少し迷っています。どんな洞察も素晴らしいでしょう。

ありがとうございました

4

3 に答える 3

5

いくつかのポインタ:

関数を戻り値なしで出力するのではなく、単に呼び出すか、何かを返して印刷することをお勧めします。

def readRows():
    for rownum in range(sh1.nrows):
        rows = sh1.row_values(rownum)
        userNm = rows[4]
        Password = rows[5]
        supID = rows[6]
        print userNm, Password, supID

readRows()

またはを見てdocs、row_valuesからスライスを取得できます。

row_values(rowx、start_colx = 0、end_colx = None)[#]

Returns a slice of the values of the cells in the given row.

インデックス4〜6の行が必要なため:

def readRows():
    # using list comprehension
    return [ sh1.row_values(idx, 4, 6) for idx in range(sh1.nrows) ]

print readRows()

2番目のメソッドを使用して、関数からリストの戻り値を取得します。この関数を使用して、Excelファイルから読み取ったすべてのデータで変数を設定できます。リストは、実際には行の値を含むリストのリストです。

L1 = readRows()
for row in L1:
    print row[0], row[1], row[2]

データを取得したら、上記の印刷例のように、リストを反復処理することでデータを操作できます。

def login(name, password, id):
    # do stuff with name password and id passed into method
    ...

for row in L1:
    login(row)

また、データを格納するためのさまざまなデータ構造を調べることもできます。辞書を使用して名前でユーザーを見つける必要がある場合は、おそらく最善の策です。

def readRows():
    rows = [ sh1.row_values(idx, 4, 6) for idx in range(sh1.nrows) ]
    # using list comprehension
    return dict([ [row[4], (row[5], row[6])] for row in rows ])

D1 = readRows()
print D['Bob']
('sdfadfadf',23)

import pprint

pprint.pprint(D1)
{'Bob': ('sdafdfadf',23),
 'Cat': ('asdfa',24),
 'Dog': ('fadfasdf',24)}

注意すべきことの1つは、辞書の値がPythonで任意の順序で返されることです。

于 2011-04-14T17:47:28.470 に答える
1

xlrdを使用するつもりかどうかはわかりませんが、PyWorkbooksを確認することをお勧めします(注:私はPyWorkbooksの作成者です:D)

from PyWorkbooks.ExWorkbook import ExWorkbook

B = ExWorkbook()
B.change_sheet(0)
# Note:  it might be B[:1000, 3:6].  I can't remember if xlrd uses pythonic addressing (0 is first row)
data = B[:1000,4:7]  # gets a generator, the '1000' is arbitrarily large.

def readRows()
   while True:
       try:
           userNm, Password, supID = data.next()  # you could also do data[0]
           print userNm, Password, supID
           if usrNm == None: break  # when there is no more data it stops
       except IndexError:
           print 'list too long'
readRows()

あなたはこれがあなたがしたであろう何よりもかなり速い(そして私が望むより簡単である)ことに気付くでしょう。メソッドは行全体を取得します。これは1000要素の長さになる可能性があります。私はこれをできるだけ速くデータを取得するために作成しました(そしてnumpyなどのサポートも含まれています)。

あなたの場合、速度はおそらくそれほど重要ではありません。しかし、将来的には:Dになる可能性があります

見てみな。ドキュメントは、初心者ユーザー向けのプログラムで利用できます。 http://sourceforge.net/projects/pyworkbooks/

于 2011-04-15T00:15:34.707 に答える
0

良さそうです。1つの注意点として、実際にはすべての行のセルから値を読み取るため、「行」を「セル」に置き換える必要があります。

于 2011-04-14T17:29:16.973 に答える