【问题标题】:Python script to compare the columns in two files用于比较两个文件中的列的 Python 脚本
【发布时间】:2016-12-22 12:15:45
【问题描述】:

此脚本的第一个目标是从两个文件(1.csv2.csv)的第 1 列中获取前 14 位数字。 1.csv 有正确的记录映射,而 2.csv 有很少的记录不匹配,所以比较两个文件中 column1 的前 14 位,得到不唯一的记录,这是通过脚本完成的.

第二个未完成的目标是例如我在1.csv 中有一条记录,第一列和第二列的相同记录在2.csv 中,另一条记录第一列相同,第二列不同,我希望这一行也打印在输出中。

脚本是:

import csv
import sys

with open('1.csv', 'r') as csv1, open('2.csv', 'r') as csv2:
    csv1_lines = csv1.readlines()
    csv2_lines = csv2.readlines()

csv1_headers = [line[:14] for line in csv1_lines]
csv2_headers = [line[:14] for line in csv2_lines]

with open('output.csv', 'w') as out_file:
    for line in csv2_lines:
        if line[:14] not in csv1_headers:
            out_file.write(line)

【问题讨论】:

  • 您的脚本基本上可以工作,您只比较每行的前 14 位数字,并且“2222222222222222”在两个文件之间很常见...如果您想获得预期的输出,您需要比较每行有更多字符。
  • 谢谢杰罗姆..我需要帮助..如果你能在代码中帮助我,谢谢

标签: python csv


【解决方案1】:

我怀疑你可能真的想要这样的东西:

import csv
import io

file_1 = io.StringIO('''
1111111111111111:xxxxxxxxxxxxxxx
2222222222222222:yyyyyyyyyyyyyyy
3333333333333333:zzzzzzzzzzzzzzz
'''.strip())

file_2 = io.StringIO('''
1111111111111111:xxxxxxxxxxxxxxx
1111111111111110:xxxxxxxxxxxxxxx
1111111111111123:xxxxxxxxxxxxxxx
11111111111111:xxxxxxxxxxxxxxx
2622222222222222:yyyyyyyyyyyyyyy
2222222222222222:yyyyyyyyyyyyret
2222222222222222:yyyyyyyyyyyyyyy
4444444444444444:ppppppppppppppp
'''.strip())

good_reader = csv.reader(file_1, delimiter=':')
match_reader = csv.reader(file_2, delimiter=':')

good_values = [row for row in good_reader]

for row in match_reader:
    if row not in good_values:
        print(row)

但是,它没有提供您所期望的相同输出。所以也许你真的想要这个?

good_values = [(row[0][:14], row[1]) for row in good_reader]

for row in match_reader:                                                               
    if (row[0][:14], row[1]) not in good_values:                              
        print(':'.join(row))                                          

【讨论】:

  • 然后发生了什么?如果您不确定如何解释您尝试了什么、您期望什么以及发生了什么,请参阅minimal reproducible example。因为如果我将第一个代码块中的good_values = ... on 替换为第二个代码块,它会给我您期望看到的值。我做了一些细微的更改,使其以您显示的格式输出内容。
  • 这个例子产生了你期望的输出。但是您说它并非没有解释区别是什么。这不是为您编写所有代码的服务。如果您无法对代码示例进行细微修改,则不应编程。
  • @kto - 作为警告,侮辱那些努力帮助你的人并不是让人们在未来想要帮助你的好方法。
  • 哥们,他先开始侮辱我,你为什么不看看他的cmets
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-18
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
相关资源
最近更新 更多