我有两个psv(管道分隔)文件,我需要按列比较数据。
如何比较这两个文件,是否可以通过机器人比较两个psv文件?
答案 0 :(得分:3)
专门针对psv文件的机器人框架没有任何内置功能。但是,假设它们是文本文件,您可以在python中编写一个比较两个文件的关键字。 Python有一个csv module,可以很容易地解析这些文件,假设你的数据格式正确。
例如,使用以下内容创建名为PsvLibrary.py
的文件。请注意:这不是生产质量的代码。它假定数据格式正确,并且每个文件具有完全相同的行数,并且行数不是很多。关键是要显示一般的想法,而不是提供一个功能齐全的库:
import csv
class PsvLibrary(object):
def compare_columns(self, column_number, filea, fileb):
with open(filea, "rb") as f:
reader = csv.reader(f, delimiter="|")
filea_data = [line for line in reader]
with open(fileb, "rb") as f:
reader = csv.reader(f, delimiter="|")
fileb_data = [line for line in reader]
# for the given column, make sure the data in file a
# matches the data in file b
c = int(column_number)
for n, (row_a, row_b) in enumerate(zip(filea_data, fileb_data)):
if row_a[c] != row_b[c]:
raise Exception("line %d: '%s' != '%s'" % (n+1, row_a[c], row_b[c]))
然后,您可以在这样的测试用例中使用此库:
*** Settings ***
| Library | PsvLibrary
*** Test Cases ***
| Example of comparing columns in pipe-separated files
| | compare columns | 1 | file1.psv | file2.psv
要进行测试,请使用以下数据创建名为file1.psv
的文件:
apple|red
orange|orange
grape|green
使用以下数据创建名为file2.psv
的第二个文件。请注意,第二列中的最后一行是不同的:
apple|red
orange|orange
grape|purple
如果您运行上述测试,您应该将其视为输出:
==============================================================================
Example
==============================================================================
Example of reading a pipe-separated file | FAIL |
line 3: 'green' != 'purple'