在 Python 中将参数添加到 for 循环的简写形式
Add parameters to a short hand for loop in Python
非常抱歉,我无法为我的问题提供更好的标题。
我是 Python 编程的新手,我必须对应用程序中的现有代码做一些小改动。
当前的 python 代码读取 Excel sheet 中的每一行和每一列,并将其按原样存储在数据库中的 table 中,命名为 "Commits".
我们使用的数据库是 SQL Lite,我们使用的 python 库是 sqlite3.py
在现有代码中,只有 6 列插入到数据库中,因为它来自 excel sheet。
以下是它的代码:-
def constructjenkinsdata(filepath):
return [(jenkinsentry[0], jenkinsentry[1], jenkinsentry[3],jenkinsentry[2],jenkinsentry[4],jenkinsentry[5],str(dateparser.parse(jenkinsentry[6],ignoretz=True)),jenkinsentry[7]) for jenkinsentry in csvrowgenerator(filepath)]
def loadjenkinsdata(jenkinssource, concurrency=3):
p = Pool(concurrency)
jenkinsdataset_lists = p.map(constructjenkinsdata, jenkinssource)
jenkinsdataset = list(chain.from_iterable(jenkinsdataset_lists))
persistjenkinsdata(jenkinsdataset, batchid)
在上面的代码中,persistjenkinsdata 是一个函数,它只是将插入查询传递给数据库以插入数据集。
以下是csvrowgenerator的代码:-
def csvrowgenerator(filepath):
with open(filepath, encoding="utf8") as f:
for row in csv.reader(f):
yield row
现在我的要求是,在读取 excel sheet 中的每一列时,我们必须将第二列作为输入传递给 Select 连接查询,该查询将 return 一组两列,每个列的值需要在上面的collection 短手for 循环中传递,然后再将其插入到数据库中。
我编写了一个函数,在从 DB 获取值后 returns 各自的值,当我传递静态输入时,该函数 return 正确输出。但我不知道如何将输入从上面的 for 循环动态传递给该函数。
如何更改以下代码行以包含要传递到数据集中的另外两个参数。
我需要的是如下:-
return [(jenkinsentry[0], jenkinsentry[1], jenkinsentry[3],jenkinsentry[2],jenkinsentry[4],jenkinsentry[5],str(dateparser.parse(jenkinsentry[6], ignoretz=True)),jenkinsentry[7], {Value-1 getting returned from DB, Input is jenkinsentry[2]}, {Value-2 returned from DB, input is jenkinsentry[ 2]}) jenkinsentry 在 csvrowgenerator(filepath)]
我是 python 的新手,所以我不知道如何更改循环的简写以相应地更改 collection。
我尝试了以下方法:-
def constructjenkinsdata(filepath):
columns = []
for jenkinsentry in csvrowgenerator(filepath):
buildNo = jenkinsentry[0]
#print('Build NO .. ' + buildNo)
columns.append(buildNo)
url = jenkinsentry[1]
columns.append(url)
#print('URL....'+url)
testCaseName = jenkinsentry[2]
columns.append(testCaseName)
className = jenkinsentry[3]
columns.append(className)
crid = jenkinsentry[4]
columns.append(crid)
errorDetails = jenkinsentry[5]
columns.append(errorDetails)
createTime = str(dateparser.parse(jenkinsentry[6],ignoretz=True))
columns.append(createTime)
print('Create time.....' + str(createTime))
status = jenkinsentry[7]
columns.append(status)
print('Test Case Name....' + testCaseName)
lastFailedBuildIDAndCreateTime = returnbuildIDAndCreatedateSet(testCaseName)
lastFailedBuildID = str(lastFailedBuildIDAndCreateTime[0])
print('Last Failed build ID .....' + str(lastFailedBuildID))
columns.append(lastFailedBuildID)
lastFailedCreateTimeString = str(lastFailedBuildIDAndCreateTime[1])
columns.append(lastFailedCreateTimeString)
print('Last Failed Create Time .....' + str(lastFailedCreateTimeString))
#jenkinsColumnCollection.append(columns)
return columns
但是上面的代码只运行一次,并没有遍历行中的所有项目。当我尝试使用 yield 而不是 return 时。它在以下行中给出错误:-
詹金斯数据集=列表(chain.from_iterable(jenkinsdataset_lists))
下面是从我的 For 循环代码 return 编辑的 print 语句的输出:-
jenkins data set.. First Item.... [['922', 'sdsadad', 'Test Suite Hook
s', 'Test Suite Hooks', '', '', '2018-05-23 01:00:00', 'pass', 'None',
'None']]
以下是 "return [(jenkinsentry[0], jenkinsentry[1], jenkinsentry[3],jenkinsentry[2],jenkinsentry[4],jenkinsentry[5],str(dateparser.parse(jenkinsentry[6],ignoretz=True)),jenkinsentry[7]) for jenkinsentry in csvrowgenerator(filepath)]"
的实际代码如何形成输出
jenkins data set.. First Item.... [[('922', 'sdsadad', 'Test Suite
Hooks', 'Test Suite Hooks', '', '', '2018-05-23 01:00:00', 'pass', '',
''), ('922', 'sdsadad', 'abc/ssdsd', 'Quebjhfghjhdg aeuyruyiyd', '',
'', '2018-05-23 01:00:00', 'pass', '', ''), ('922', 'sdsadad',
'abc/ssdsd', 'Quebjhfghjhdg aeuyruyiyd', '', '', '2018-05-23
01:00:00', 'pass', '', '')]]
请帮助我形成一个 collection,它从现有的 for 循环中获取输入并正确解析为列表(chain.from_iterable(jenkinsdataset_lists))
让我们看看你的代码
def constructjenkinsdata(filepath):
columns = []
for jenkinsentry in csvrowgenerator(filepath):
...
return columns
您 return columns
在第一次迭代结束时。
应该是:
def constructjenkinsdata(filepath):
columns = []
for jenkinsentry in csvrowgenerator(filepath):
...
return columns
非常抱歉,我无法为我的问题提供更好的标题。 我是 Python 编程的新手,我必须对应用程序中的现有代码做一些小改动。 当前的 python 代码读取 Excel sheet 中的每一行和每一列,并将其按原样存储在数据库中的 table 中,命名为 "Commits". 我们使用的数据库是 SQL Lite,我们使用的 python 库是 sqlite3.py 在现有代码中,只有 6 列插入到数据库中,因为它来自 excel sheet。 以下是它的代码:-
def constructjenkinsdata(filepath):
return [(jenkinsentry[0], jenkinsentry[1], jenkinsentry[3],jenkinsentry[2],jenkinsentry[4],jenkinsentry[5],str(dateparser.parse(jenkinsentry[6],ignoretz=True)),jenkinsentry[7]) for jenkinsentry in csvrowgenerator(filepath)]
def loadjenkinsdata(jenkinssource, concurrency=3):
p = Pool(concurrency)
jenkinsdataset_lists = p.map(constructjenkinsdata, jenkinssource)
jenkinsdataset = list(chain.from_iterable(jenkinsdataset_lists))
persistjenkinsdata(jenkinsdataset, batchid)
在上面的代码中,persistjenkinsdata 是一个函数,它只是将插入查询传递给数据库以插入数据集。
以下是csvrowgenerator的代码:-
def csvrowgenerator(filepath):
with open(filepath, encoding="utf8") as f:
for row in csv.reader(f):
yield row
现在我的要求是,在读取 excel sheet 中的每一列时,我们必须将第二列作为输入传递给 Select 连接查询,该查询将 return 一组两列,每个列的值需要在上面的collection 短手for 循环中传递,然后再将其插入到数据库中。
我编写了一个函数,在从 DB 获取值后 returns 各自的值,当我传递静态输入时,该函数 return 正确输出。但我不知道如何将输入从上面的 for 循环动态传递给该函数。 如何更改以下代码行以包含要传递到数据集中的另外两个参数。 我需要的是如下:- return [(jenkinsentry[0], jenkinsentry[1], jenkinsentry[3],jenkinsentry[2],jenkinsentry[4],jenkinsentry[5],str(dateparser.parse(jenkinsentry[6], ignoretz=True)),jenkinsentry[7], {Value-1 getting returned from DB, Input is jenkinsentry[2]}, {Value-2 returned from DB, input is jenkinsentry[ 2]}) jenkinsentry 在 csvrowgenerator(filepath)]
我是 python 的新手,所以我不知道如何更改循环的简写以相应地更改 collection。 我尝试了以下方法:-
def constructjenkinsdata(filepath):
columns = []
for jenkinsentry in csvrowgenerator(filepath):
buildNo = jenkinsentry[0]
#print('Build NO .. ' + buildNo)
columns.append(buildNo)
url = jenkinsentry[1]
columns.append(url)
#print('URL....'+url)
testCaseName = jenkinsentry[2]
columns.append(testCaseName)
className = jenkinsentry[3]
columns.append(className)
crid = jenkinsentry[4]
columns.append(crid)
errorDetails = jenkinsentry[5]
columns.append(errorDetails)
createTime = str(dateparser.parse(jenkinsentry[6],ignoretz=True))
columns.append(createTime)
print('Create time.....' + str(createTime))
status = jenkinsentry[7]
columns.append(status)
print('Test Case Name....' + testCaseName)
lastFailedBuildIDAndCreateTime = returnbuildIDAndCreatedateSet(testCaseName)
lastFailedBuildID = str(lastFailedBuildIDAndCreateTime[0])
print('Last Failed build ID .....' + str(lastFailedBuildID))
columns.append(lastFailedBuildID)
lastFailedCreateTimeString = str(lastFailedBuildIDAndCreateTime[1])
columns.append(lastFailedCreateTimeString)
print('Last Failed Create Time .....' + str(lastFailedCreateTimeString))
#jenkinsColumnCollection.append(columns)
return columns
但是上面的代码只运行一次,并没有遍历行中的所有项目。当我尝试使用 yield 而不是 return 时。它在以下行中给出错误:- 詹金斯数据集=列表(chain.from_iterable(jenkinsdataset_lists))
下面是从我的 For 循环代码 return 编辑的 print 语句的输出:-
jenkins data set.. First Item.... [['922', 'sdsadad', 'Test Suite Hook s', 'Test Suite Hooks', '', '', '2018-05-23 01:00:00', 'pass', 'None', 'None']]
以下是 "return [(jenkinsentry[0], jenkinsentry[1], jenkinsentry[3],jenkinsentry[2],jenkinsentry[4],jenkinsentry[5],str(dateparser.parse(jenkinsentry[6],ignoretz=True)),jenkinsentry[7]) for jenkinsentry in csvrowgenerator(filepath)]"
的实际代码如何形成输出jenkins data set.. First Item.... [[('922', 'sdsadad', 'Test Suite Hooks', 'Test Suite Hooks', '', '', '2018-05-23 01:00:00', 'pass', '', ''), ('922', 'sdsadad', 'abc/ssdsd', 'Quebjhfghjhdg aeuyruyiyd', '', '', '2018-05-23 01:00:00', 'pass', '', ''), ('922', 'sdsadad', 'abc/ssdsd', 'Quebjhfghjhdg aeuyruyiyd', '', '', '2018-05-23 01:00:00', 'pass', '', '')]]
请帮助我形成一个 collection,它从现有的 for 循环中获取输入并正确解析为列表(chain.from_iterable(jenkinsdataset_lists))
让我们看看你的代码
def constructjenkinsdata(filepath):
columns = []
for jenkinsentry in csvrowgenerator(filepath):
...
return columns
您 return columns
在第一次迭代结束时。
应该是:
def constructjenkinsdata(filepath):
columns = []
for jenkinsentry in csvrowgenerator(filepath):
...
return columns