在 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