我有以下代码读取/打印直接从电子表格中读取的信息行:
in_path = connector.GetWorksheetDataWithId(worksheet_id)
# Simple test print
for item in in_path:
print item
打印以下格式的多行:
{'_chk2m': 'Name1@domain.com', '_cn6ca': 'PaulDu', '_cokwr': '005C0000003yL'}
{'_chk2m': 'Name2@domain.com', '_cn6ca': 'Jeanell', '_cokwr': '005C0000003we'}
{'_chk2m': 'Name3@domain.com', '_cn6ca': 'Twanna', '_cokwr': '005C0000004tB'}
{'_chk2m': 'Name4@domain.com', '_cn6ca': 'JaneyD', '_cokwr': '005C0000003xJ}
{'_chk2m': 'Name5@domain.com', '_cn6ca': 'Charlot', '_cokwr': '005C0000003yS}
{'_chk2m': 'Name6@domain.com', '_cn6ca': 'Janessa', '_cokwr': '005C0000004pE'}
{'_chk2m': 'Name7@domain.com', '_cn6ca': 'Matilda', '_cokwr': '005C000 0003xK'}
{'_chk2m': 'Name8@domain.com', '_cn6ca': 'ChloeR', '_cokwr': '005C00000040h'}
我试图让用户提交用户别名(行中的第二项,例如'PaulDu')并返回ID#(行中的第3项)
我试过这样的事情:
def dict_test(in_path):
user_alias = raw_input("Please enter User Alias: ")
for row in in_path:
if (user_alias in elt for elt in row):
return user_alias
print row
dict_test(in_path)
并输入“PaulDu”但无法成功打印任何行。另外,我如何从现在标识的行中调用电子邮件?
编辑:
最终工作代码:
in_path = connector.GetWorksheetDataWithId(worksheet_id)
def dict_test(in_path):
user_alias = raw_input("Please enter User Alias: ")
data = []
for row in in_path:
#if any(user_alias in row[elt] for elt in row):
#if any(user_alias in value for key, value in row.items()):
if user_alias in row.values():
print row
for row in in_path:
if user_alias == row['_cn6ca']:
email = row['_chk2m']
print email
return email
dict_test(in_path)
答案 0 :(得分:0)
首先,在你搜索文件之前......
名称in_path
表示它是路径名。如果是这样,这一行:
for row in in_path:
...只是循环遍历该路径名的字符,而不是该名称的文件内容。如果您想阅读文件,则必须open
。像这样:
with open(in_path) as in_file:
for row in in_file:
调试此类问题的第一步是print
输出中间值。如果您print
编辑每个row
,那么很明显为什么这不起作用。
接下来,这一行存在一些问题:
if (user_alias in elt for elt in row):
首先,row
似乎是dict
,这意味着for elt in row
会为您提供密钥,但您尝试搜索其值。
其次,当你想检查生成器中的任何元素是否为真时,你正在检查生成器的真值,这总是正确的。为此,请使用any
函数。
您可能想要的是类似以下内容之一:
if any(user_alias in row[elt] for elt in row):
if any(user_alias in value for key, value in row.items()):
另外,你真的在寻找子串吗?您的示例完全匹配,根据您的描述,这听起来更合理。在这种情况下,你可以写:
if user_alias in row.values():
同时
另外,我如何从现在标识的行中调用电子邮件?
嗯,你的代码意味着你不知道密钥,这意味着你唯一可以做的就是浏览找到的行中的值,并启发式地找到一个看起来最像电子邮件地址的那个。
如果 知道密钥,这就容易多了:
if user_alias == row['_cn6ca']:
email = row['_chk2m']
答案 1 :(得分:0)
in_path
的项目是字典吗?在这种情况下,您可以使用字典语法:
def dict_test(in_path):
user_alias = raw_input("Please enter User Alias: ")
for row in in_path:
if row['_cn6ca'] == user_alias:
print row
return row['_cokwr']
return
会立即退出该功能,因此如果您想要显示某些内容,则必须先放置print
。
答案 2 :(得分:0)
那样的东西? (返回匹配的行,假设您知道密钥,就可以从中提取所需的任何字段。)
def dict_test(in_path):
user_alias = raw_input("Please enter User Alias: ")
for row in in_path:
if (row['_cn6ca'] == user_alias ):
return row
my_row = dict_test(in_path)
id = my_row['_cokwr']
email = my_row['_chk2m']