Excel、Python和XLRD的帮助
编程相对较新,因此我选择使用python来学习 目前,我正试图通过XLRD从Excel电子表格中读取用户名和密码列表,并使用它们登录到某个位置。然后退出,转到下一行。登录etc并继续 下面是代码的一小部分: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
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的东西。谢谢