【问题标题】:comparing values between two text files with python用python比较两个文本文件之间的值
【发布时间】:2019-05-02 17:38:19
【问题描述】:

我有两个文本文件,我想从中创建一个新文件。

一个文件的数据如下所示:mf-bom.xyrs

J25 5193.94 -3669.45    90.0    1   1   0.0 0.0 DF40C-100DS-0.4V        1   DF40C-100DS-0.4V
J24 4778.15 -3592.17    270.0   1   1   0.0 0.0 DF40C-100DS-0.4V        1   DF40C-100DS-0.4V
TP47    5232.28 -3688.98    0.0 2   1   0.0 0.0 DO NOT POPULATE     1   DNP
TP19    4905.98 -3583.0 0.0 2   1   0.0 0.0 DO NOT POPULATE     1   DNP
TP15    5206.3  -3796.85    0.0 2   1   0.0 0.0 DO NOT POPULATE     1   DNP

另一个有如下数据:single-bom.bom

114.119, 114.119, "R12"
114.633, 114.633, "R25"
117.028, 117.028, "C20"
135.495219, 135.495219, "TP34"
137.56, 137.56, "J24"
147.56, 137.56, "J25"

我想查看single-bom.bom 中的最后一项并从中获取值...在本例中,它是 R12。然后,我想查看mf-bom.xyrs 每一行中的第一个条目,看看是否有匹配项(“R12”)。如果有,请将整行从 mf-bom.xyrs 复制并附加到另一个文件中。

我已经尝试通过列表(例如)将它们都带入 python


with open('mf-bom.xyrs') as f:
    mf_bom = f.read().split("\t")

但这产生了一个很长的一维列表,并且没有保留行(我的意思是换行符)。

我尝试过的所有其他东西都太愚蠢了,无法在这里发布......我觉得我在这里撞到了我的头,错过了如果你正确使用它,python 是多么容易。

【问题讨论】:

  • 考虑使用对您的应用程序更有用的东西;列表非常通用,并没有为您提供良好的搜索功能。 dict 或 PANDAS 数据框可能会有所帮助。将一个文件读入该结构。一次读另一行,寻找结构中的关键。当您找到匹配项时,将新格式化的行转储到您的输出文件中。

标签: python list parsing text io


【解决方案1】:

这不是一个完整的答案,但我想解决您尝试读取文件的问题。

当你这样做时:

with open('mf-bom.xyrs') as f:
    mf_bom = f.read().split("\t")

您正在阅读整个文件,然后将其拆分到选项卡上……所以您当然会得到一个大的单一列表。你想独立分割文件的每一行,所以像这样:

with open('mf-bom.xyrs') as f:
    mf_bom = []
    for line in f:
      mf_bom.append(line.split('\t'))

在此代码之后,mf_bom 将是一个列表列表,每行一个,例如:

[
  ['J25', '5193.94', '-3669.45', '90.0', '1', '1', '0.0', '0.0', 'DF40C-100DS-0.4V', '1', 'DF40C-100DS-0.4V'],
  ...
]

你可以这样写更简洁:

with open('mf-bom.xyrs') as f:
    mf_bom = [line.split('\t') for line in f]

您也可以使用csv 模块来读取此文件。

【讨论】: