我是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
感谢您完成此脚本的任何帮助。
谢谢
答案 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