Python脚本,用于根据匹配条件从csv文件打印相邻单元格上的内容

时间:2015-09-04 23:15:29

标签: python

我是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 

感谢您完成此脚本的任何帮助。

谢谢

2 个答案:

答案 0 :(得分: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])从列表的相邻元素创建一个元组列表,可以将其转换为字典,您要查找的模式是键,相应的字母是值。

答案 1 :(得分: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