0

正如它在锡上所说,我正在编写一个 Python (2.7) 脚本,它查看两个电子表格(另存为 .csv),比较某些列以找到包含同一个人信息的行,并从每个电子表格中提取某些数据该人并将该数据放在另一个电子表格中。

我写的内容包括在下面。

我遇到的问题是,当我运行这个程序时,从 G__Notification 电子表格的表格中间找到并报告了第一个人和一个人。然而,其他人都不是,尽管我可以手动查看电子表格并自己比较列并找到此人。

并不是说他们只是没有被报告,因为我在找到匹配项的地方包含了一个打印功能,并且它只打印 2——为上述每个人打印一次。

我在这里做了什么奇怪的事情吗?任何帮助都会很棒。

# This script will take data from Matrix.csv and GO_Notification.csv, find the matching
# data sets, and report the data in an output folder.


import csv

# Will read data from Matrix_CSV, goFile_CSV
# Will write data to AutoGeneratorOutput.csv
f = open('AutoGeneratorOutput.csv', 'wb')
g = open('GO_Notification.csv', 'rb')
h = open('Matrix.csv', 'rb')
matrixFile_reader = csv.reader(h)
goFile_reader = csv.reader(g)
outputFile_writer = csv.writer(f)

# Create the headings in the output file
headings = ['Employee #', 'Name', 'Last 4 of SS', 'Hired', 'GO Date',\
            'PL Description', 'Department Name', 'Title', 'Supervisor'\
            'Accudose', 'Intellishelf', 'Vocera']
outputFile_writer.writerow(headings)

matrixFile_reader.next()
goFile_reader.next()

while 1:
    for goRow in goFile_reader:
        goLine = goRow
        h.seek(0)     # Return to the top of the matrixFile for the next iteration
        for matrixRow in matrixFile_reader:
            try:
                matrixLine = matrixRow
                # Compare the departments, job numbers, and PLs to find a match
                if goLine[9].strip() == matrixLine[1].strip() and goLine[11].strip() == matrixLine[5].strip() \
                   and goLine[12].strip() == matrixLine[3].strip():
                      # Here's a match
                      output = [goLine[0], goLine[1], '', goLine[2], goLine[3], goLine[9],\
                              goLine[11], goLine[13], goLine[15], matrixLine[20], matrixLine[21],\
                              matrixLine[22], matrixLine[23]]
                      outputFile_writer.writerow(output)
                      print(goLine[1])
            except StopIteration:
                pass
    break

# Close the files when finished
f.close()
g.close()
h.close()
print('Finished')
4

2 回答 2

1

如果没有样本输入数据,很难说出您的意思。你也有一些令人困惑的不必要的代码,删除这是第一步。

while 1:
    for foo:
       goLine=goow
       [etcetera]
    break

做同样的事情

for foo:
    goLine=goRow
    [etcetera]

所以你可以摆脱你的“while”和“break”行。

另外,我不确定你为什么要赶上 StopIteration。删除你的 try/catch 行。

于 2013-06-12T13:29:25.937 回答
0

将每个文件作为表加载到数据库中,然后使用连接查询;)

...好吧,不是那么愚蠢,因为 Python 支持 Sqlite3 + 内存数据库。
请参见使用 Python 将 CSV 文件导入 sqlite3 数据库表

于 2013-06-12T13:57:22.563 回答