2015-09-04 60 views
0

我是python编程的新手。我需要从csv文件读取内容并根据匹配条件进行打印。该文件包含列是这样的:Python脚本基于匹配标准从csv文件打印相邻单元上的内容

ABC,A,XYZ,W
GFK,B,ABC,Y,XYZ,F

我要打印的相邻列的基础上,匹配输入的内容串。对于例如如果字符串是abc,它应该打印A,W代表xyz,第一行代表gfk的“不匹配”。这应该为每行执行直到文件结束。

我有以下代码。但是,不知道选择相邻的列。

c= ['abc','xyz','gfk'] 
with open('filer.csv', 'rt') as csvfile: 
    my_file = csv.reader(csvfile, delimiter=',') 
    for row in my_file: 
     for i in c: 
      if i in row: 
       print the contents of the adjacent cell 

我很感谢任何帮助完成此脚本。

谢谢

回答

1

你的方法变得更加困难打印相邻的值,因为即使您使用enumerate获取索引,也必须在查找每个模式后再次搜索该行(在if i in row:之后,您不会立即知道它在哪里如在该行中)。通过在字典结构化数据变得简单了:

patterns = ['abc','xyz','gfk'] 
with open('filer.csv') as fh: 
    reader = csv.reader(fh, skipinitialspace=True) 
    for line in reader: 
     print '---' 
     content = dict(zip(line[::2], line[1::2])) 
     for pattern in patterns: 
      print "{}: {}".format(pattern, content.get(pattern, 'no match')) 

zip(line[::2], line[1::2])创建从列表中的相邻元素,它可以变成一个字典,在那里你正在寻找的模式是按键和一个元组列表相应的字母是值。

+0

谢谢你的回复,我得到的结果如下。正如你所看到的,只有最后一个元组是匹配的。 --- ABC:一个 XYZ:没有匹配 GFK:没有匹配 --- ABC:没有匹配 XYZ:没有匹配 GFK:乙 –

+0

您的文件空间,你需要的,如果要带他们,他们没有意义。 –

+0

用'reader = csv.reader(fh,skipinitialspace = True)'替换第三行。 –

0

您可以为CSV适应这一点,但基本上你问什么

csv = [['abc', 'A', 'xyz', 'W'], 
     ['gfk', 'B', 'abc', 'Y', 'xyz', 'F']] 

match_string = ['abc','xyz','gfk'] 

for row in csv: 
    for i, column_content in enumerate(row): 
     if column_content in match_string: 
      print row[i + 1] # + 1 for the following column_content 'A', 'W', etc. 

你应该阅读有关切片:Explain Python's slice notation

相关问题