在 Python 中查找两个 CSV 文件的公共区域

给定两个 CSV 文件,每个文件有 10 列,其中第一列是主键。需要使用 Python 在两个 CSV 文件中找到公共区域。比较时只考虑第一列(主键),其他数据不考虑。

  1. 解决方案:

首先,需要解析和存储两个 CSV 文件的行,并将其存储在两个列表中。假设这两个列表分别是 lstCAN_LOG_TABLElstSHADOW_LOG_TABLE

接下来,需要比较这两个列表。使用 nested loops 来遍历两个列表,并比较每一行的第一列。如果两个第一列相等,则可能是公共区域的开始。

为了确定是否是公共区域的开始,需要检查接下来的 MAX_COMMON_THRESHOLD 行是否也相同。如果相同,则可以认为找到了一个公共区域的开始。

然后,需要将这个公共区域的行写入到两个新的 CSV 文件中,一个文件对应一个 CSV 文件的公共区域。

以下是详细的 Python 代码:

import csv

# 解析和存储两个 CSV 文件的行
with open('input_file_one.csv', 'r') as file1:
    reader = csv.reader(file1)
    lstCAN_LOG_TABLE = list(reader)

with open('input_file_two.csv', 'r') as file2:
    reader = csv.reader(file2)
    lstSHADOW_LOG_TABLE = list(reader)

# 设置一些变量
input_file_one_row_count = len(lstCAN_LOG_TABLE)
input_file_two_row_count = len(lstSHADOW_LOG_TABLE)
MAX_COMMON_THRESHOLD = 10  # 连续匹配的行数阈值

# 打开输出文件
with open('output_file_one.csv', 'w', newline='') as file1:
    writer_one = csv.writer(file1)
with open('output_file_two.csv', 'w', newline='') as file2:
    writer_two = csv.writer(file2)

# 遍历两个列表
for index in range(len(lstCAN_LOG_TABLE)):
    for l_index in range(len(lstSHADOW_LOG_TABLE)):
        # 比较第一列
        if lstSHADOW_LOG_TABLE[l_index][1] == lstCAN_LOG_TABLE[index][1]:
            # 可能找到公共区域的开始
            index_can_log = index
            index_shadow_log = l_index
            start = index_shadow_log
            if (index_shadow_log + MAX_COMMON_THRESHOLD) <= (input_file_two_row_count - 1):
                end = index_shadow_log + MAX_COMMON_THRESHOLD
            else:
                end = (index_shadow_log) + ((input_file_two_row_count - 1) - (index_shadow_log))
            can_index = index
            bPreScreened = 1
            # 检查接下来的行是否也相同
            for num in range(start, end):
                if lstSHADOW_LOG_TABLE[num][1] == lstCAN_LOG_TABLE[can_index][1]:
                    if (can_index + 1) < (input_file_one_row_count - 1):
                        can_index = can_index + 1
                    else:
                        break
                else:
                    bPreScreened = 0
                    break
            # 如果是公共区域的开始,则将这些行写入输出文件
            if bPreScreened == 1:
                for number in range(start, end):
                    if lstSHADOW_LOG_TABLE[number][1] == lstCAN_LOG_TABLE[index][1]:
                        writer_two.writerow(lstSHADOW_LOG_TABLE[number][0])
                        writer_one.writerow(lstCAN_LOG_TABLE[index][0])
                        if (index + 1) < (input_file_one_row_count - 1):
                            index = index + 1
                        else:
                            file1.close()
                            file2.close()
                            print("Common Region in Two CSVs identifed and recorded")
                            return

# 关闭输出文件
file1.close()
file2.close()

print("Common Region in Two CSVs identifed and recorded")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值