使用值对和列表满足条件时创建新列表

时间:2017-07-04 20:17:26

标签: python csv

这里有第一个问题。我试图找到一个解决方案大约一个星期但我终于要问了。我也愿意接受关于这个问题标题的建议。

我正在使用python3

我有一个csv文件(legend.csv),其中包含2个标题(键),一个用于数字,一个用于缩写。

每个abbr都有一个相应的编号,这在csv文件中表示。

我还有一个名单列表(list.txt),名字的第一部分通常是某种类型的缩写。

该程序背后的想法是:我想分析csv文件,并在list.txt的名称中添加与abbr对应的数字。如果可能,输出应该是新的文本文件。

example of list.txt:
    addg-stuff
    cbdd-stuff
    abc-stuff
    add-stuff

example of legend.csv:
    number,abbr
    0001,addg
    0002,cbdd
    0003,abc
    0004,add


example of desired output:
    0003-abc-stuff
    0001-addg-stuff
    0004-add-stuff
    0002-cbdd-stuff

以下找到了abbr,但我仍然坚持如何在名称中添加相应的数字。 Easiest way to cross-reference a CSV file with a text file for common strings

上面的链接是我找到如何拉出匹配字符串但不确定从何处开始的地方。

   import csv
   with open("legend.csv") as csvfile:
       reader = csv.reader(csvfile)
       searchstring = {row[1] for row in reader}
       num = {row[0] for row in reader}
   with open("list.txt") as txtfile:
       for names in txtfile:
           for i in searchstrings:
               if i in name:
                   matching = (name) #not sure where to go from here. If matching is printed, the names are found that contain the abbr.

绝对是新手,刚开始搞乱python一个月左右。 任何帮助都将非常感激,特别是如果你有这样的情况或一般的python的任何好资源。

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

import csv

f1 = open('legend.csv')
f1 = csv.reader(f1) #splitting at instances of commas
f1 = list(f1) 

f2 = open('list.txt').read().splitlines() #reading every line in the txt file

for i in f2:
   for b in f1[1:]:
       if i.split("-")[0] == b[1]:
          print str(b[0])+"-"+i

输出:

0001-addg-stuff
0002-cbdd-stuff
0003-abc-stuff
0004-add-stuff

在双for循环中,算法从txt文件中取一行,然后从csv文件中取一行。请注意,f1[1:]是列表切片。这意味着我们从csv文件中的标题开始,这对我们来说没有帮助解决问题。从那里,算法尝试确定缩写是否包含在行的第一部分中,在这种情况下存储为i。如果是这样,则数字和线条将以所需输出的样式打印。