逐行逐列读取和比较两个CSV文件

-1 投票
1 回答
1156 浏览
提问于 2025-04-30 07:46

我有两个CSV文件,分别叫做data.csv和data2.csv。

我想先把这两个文件中的数据精简到我感兴趣的部分。我已经搞定了data.csv这一部分。接下来,我想逐行比较,确保如果某一行缺失了,就把它加上。

然后,我想查看第二列。如果那里有值,我就想把数据写入第三列;如果第三列有数据,再写入第四列,依此类推。

我现在的程序看起来是这样的。需要一些指导。

哦,我使用的是Python 3.4。

    __author__ = 'krisarmstrong'

#!/usr/bin/python

import csv

searched = ['aircheck', 'linkrunner at', 'onetouch at']


def find_group(row):
    """Return the group index of a row
        0 if the row contains searched[0]
        1 if the row contains searched[1]
        etc
        -1 if not found
    """
    for col in row:
        col = col.lower()
        for j, s in enumerate(searched):
            if s in col:
                return j
        return -1


inFile = open('data.csv')
reader = csv.reader(inFile)
inFile2 = open('data2.csv')
reader2 = csv.reader(inFile2)
outFile = open('data3.csv', "w")
writer = csv.writer(outFile, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)

header = next(reader)
header2 = next(reader2)


"""Built a list of items to sort. If row 12 contains 'LinkRunner AT' (group 1),
    one stores a triple (1, 12, row)
    When the triples are sorted later, all rows in group 0 will come first, then
    all rows in group 1, etc.
"""

stored = []
writer.writerow([header[0], header[3]])

for i, row in enumerate(reader):
    g = find_group(row)
    if g >= 0:
        stored.append((g, i, row))
stored.sort()

for g, i, row in stored:
    writer.writerow([row[0], row[3]])

inFile.close()
outFile.close()
暂无标签

1 个回答

0

也许可以试试:

import csv
with open('some.csv', 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
        col1.append(row[0])
        col2.append(row[1])

for i in xrange(len(col1))
    if col1[i] == '':
        #thing to do if there is nothing for col1
    if col2[i] == '':
        #thing to do if there is nothing for col2

这是一个开始,目的是“确保如果缺少某一行,就把它加上”。

撰写回答