Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:csv输出中的数据不匹配_Python_Csv - Fatal编程技术网

Python:csv输出中的数据不匹配

Python:csv输出中的数据不匹配,python,csv,Python,Csv,假设我有两个csv输出,如下所示: 标记1: [答: 及 标记2: [答: 在这种情况下,在第一个csv输出中找不到m和n。 因此,我为找出这两个问题而编写的代码是: 标记1[行][0]!=mark2[row1][0]: print 'some marks are not the same - no match found' 上面的代码不起作用 有什么具体的方法来解决这个问题吗 谢谢。如果您想比较整个列表,那么应该比较它们: if mark1 != mark2:

假设我有两个csv输出,如下所示:

标记1:

[答:

标记2:

[答:

在这种情况下,在第一个csv输出中找不到m和n。 因此,我为找出这两个问题而编写的代码是:

标记1[行][0]!=mark2[row1][0]:

            print 'some marks are not the same - no match found'
上面的代码不起作用

有什么具体的方法来解决这个问题吗


谢谢。

如果您想比较整个列表,那么应该比较它们:

 if mark1 != mark2:
      print 'some are not the same...'
如果您只想比较列表中每个列表的第一个字段,这是一种方法

def compare_first(mark1,mark2):
  for row in mark1:
    for row2 in mark2:
      if row[0] != row2[0]:
        return false;
  return true
然后主要使用该函数

if !equal_firs(mark1,mark2):
  print('some are not the same...')

你的例子没有多大意义

mark1= [['a', '', '', '', '', ''], ['b', '', '', '', '', ''], ['c', '', '', '', '', ''], ['d', '', '', '', '', ''], ['e', '', '', '', '', ''], ['f', '', '', '', '', ''], ['g', '', '', '', '', '']]
mark2= [['a', '10', '', '', '', ''], ['b', '', '', '', '', ''], ['c', '10', '', '', '', ''], ['d', '', '', '', '', ''], ['e', '7', '', '', '', ''], ['m', '9', '', '', '', ''], ['n', '', '', '', '', '']]
if mark1[row][0] != mark2[row1][0]:
    print 'some marks are not the same - no match found'
在if语句中,您正在寻址行和行1——为什么不在同一行中查找

除此之外,这是不对的-

mark1[row][0] != mark2[row1][0]:
我相信你的意思是:

if mark1[row][0] != mark2[row1][0]:
我发现最简单(也是计算最快)的方法是这样做:

if [n for n in mark2 if n[0] not in [m[0] for m in mark1]]:
    print 'some marks are not found...'
需要两个for循环来比较要迭代的每个值。上面的代码大致翻译为:

keys = []
for m in mark1:
    keys.append(m[0])
for n in mark2:
    if n not in keys:
        print 'some marks not found...'
        break

在开始之前,我会说我投票支持@ThaneBrimhall的答案,但出于展示各种方式的利益(并且假设你只关心一个元素是否在另一个元素中,而不管其位置如何):

如果要查看哪些错误是由哪些错误引起的:

# Get a set of unique first elements for each list
set1 = set([n[0] for n in mark1])
set2 = set([n[0] for n in mark2])

# Items in mark1 but not mark2
set1_diffs = set1.difference(set2)
if set1_diffs:
  print 'Marks {0} in mark1 but not mark2'.format(list(set1_diffs))

# Items in mark2 but not mark1
set2_diffs = set2.difference(set1)
if set2_diffs:
  print 'Marks {0} in mark2 but not mark1'.format(list(set2_diffs))

您是如何为
行1
赋值的?谢谢您的帮助!真有用
# Get a set of unique first elements for each list
set1 = set([n[0] for n in mark1])
set2 = set([n[0] for n in mark2])

# Items in mark1 but not mark2
set1_diffs = set1.difference(set2)
if set1_diffs:
  print 'Marks {0} in mark1 but not mark2'.format(list(set1_diffs))

# Items in mark2 but not mark1
set2_diffs = set2.difference(set1)
if set2_diffs:
  print 'Marks {0} in mark2 but not mark1'.format(list(set2_diffs))