Excel、Python和XLRD的帮助

Excel、Python和XLRD的帮助,python,excel,xlrd,Python,Excel,Xlrd,编程相对较新,因此我选择使用python来学习 目前,我正试图通过XLRD从Excel电子表格中读取用户名和密码列表,并使用它们登录到某个位置。然后退出,转到下一行。登录etc并继续 下面是代码的一小部分: import xlrd wb = xlrd.open_workbook('test_spreadsheet.xls') # Load XLRD Excel Reader sheetname = wb.sheet_names() #Read for XCL Sheet names sh1

编程相对较新,因此我选择使用python来学习

目前,我正试图通过XLRD从Excel电子表格中读取用户名和密码列表,并使用它们登录到某个位置。然后退出,转到下一行。登录etc并继续

下面是代码的一小部分:

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()

我已经得到了变量,它一次读取了所有变量,这就是我缺乏编程技能的原因。我知道我需要反复研究这些,并对它们做些什么,但我对什么是最佳实践有些迷茫。任何洞察都会很好


再次感谢你

看起来不错。只需一句话:您应该用“单元格”替换“行”,因为您实际上从每一行的单元格中读取值似乎很好。只需一句话:您应该将“行”替换为“单元格”,因为您实际上从每一行的单元格中读取值

两个指针:

我建议您不要打印没有返回值的函数,而只是调用它,或者返回要打印的内容

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()
或者查看,您可以从行_值中获取一个切片:

行值(行x,起始列x=0, end_colx=None)[#]

因为您只需要索引为4-6的行:

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

print readRows()
使用第二种方法从函数中获取列表返回值,可以使用此函数设置一个变量,其中包含从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)}
需要注意的一点是,在python中,字典值以任意顺序返回。

两个指针:

我建议您不要打印没有返回值的函数,而只是调用它,或者返回要打印的内容

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()
或者查看,您可以从行_值中获取一个切片:

行值(行x,起始列x=0, end_colx=None)[#]

因为您只需要索引为4-6的行:

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

print readRows()
使用第二种方法从函数中获取列表返回值,可以使用此函数设置一个变量,其中包含从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)}

需要注意的一点是,在python中返回的字典值是任意排序的。

我不确定您是否打算使用xlrd,但您可能想查看PyWorkbooks(注意,我是PyWorkbooks:D的编写者)

你会发现这比你做的任何事情都要快(我希望也更容易)。您的方法将得到一整行,可能有1000个元素长。我写这篇文章是为了尽可能快地检索数据(包括对numpy之类的东西的支持)

在你的情况下,速度可能没有那么重要。但在未来,它可能是:D

看看吧。该程序为新手用户提供文档。
我不确定您是否打算使用xlrd,但您可能想查看PyWorkbooks(注意,我是PyWorkbooks:D的作者)

你会发现这比你做的任何事情都要快(我希望也更容易)。您的方法将得到一整行,可能有1000个元素长。我写这篇文章是为了尽可能快地检索数据(包括对numpy之类的东西的支持)

在你的情况下,速度可能没有那么重要。但在未来,它可能是:D

看看吧。该程序为新手用户提供文档。

“一次读取所有值”的意思是???对不起,它一次打印列4、5和6中的所有值。如果我要输入登录过程而不是打印它们,我如何返回并转到下一行并读取下一组登录值?等等,“一次读取所有值”的意思是???对不起,它一次打印第4列、第5列和第6列中的所有值。如果我要输入登录过程而不是打印它们,我如何返回并转到下一行并读取下一组登录值?等等,谢谢你的回复。我很好奇字典在这个问题上的用法。有一件事:当我使用第二个例子时,我得到一个没有定义rownum的NameError——我还需要for循环吗?谢谢你的回答。我很好奇字典在这个问题上的用法。有一件事:当我使用第二个例子时,我得到了一个没有定义rownum的NameError——我还需要for循环吗?我一定要检查一下。一直在寻找替代xlrd的东西。谢谢,伯格,我一定要去看看。一直在寻找替代xlrd的东西。谢谢