PyNoob签入,尝试使用python获取更多代表并停止使用这么多bash。我有一个csv文件,其中包含许多行'devicename; port; portchannel',我已将其读入我认为是下面的列表。
['deviceA;portZ;portchanC', 'device1;port3;portchan1', 'deviceA;port3;portchan1', 'deviceD;portR;portchanE', 'device2;portG;portchan1', 'deviceB;portZ;portchan1', 'deviceE;portX;portchan2']
现在我要做的是从列表中的每个字符串中剥离(剪切?)第一个元素(由';'分隔)并将其存储到新列表中。我也想独一无二。我尝试了很多不同的代码示例,我在这里找到了类似的问题,但还没有找到有用的东西。
期望的输出将是
a = ['deviceA', 'device1', 'deviceD', 'device2', 'deviceB', 'deviceE']
感谢帮助!
答案 0 :(得分:1)
list = ['deviceA;portZ,portchanC', ... , 'deviceE;portX,portchan2']
output = [ele.split(';')[0] for ele in list]
uniques = set(output)
这应该可以满足您的需求。如果你想了解发生了什么,请继续阅读。
somestring.split('delimiter')
将返回字符串数组,[0]将获取第一个元素。因此'deviceA;portZ,portchanC'.split(';')
将返回['deviceA','portZ' ,'portchanC']
。因此'deviceA;portZ;portchanC'.split(';')
将为您提供'deviceA'
。
for ele in list
将迭代列表中的每个项目,并将其分配给名为ele
的变量。所以这段代码的作用是遍历列表,将每个项目拆分为&#39 ;;',返回第一部分,并将它们全部放在一个列表中。最后一行将为您提供该列表中的唯一集合。
另一种选择,更多"初学者"也可以这样做的方式如下,它与你在其他语言中看到的相似。两种方法都有效。在下面,我们创建一个空列表a
。然后我们遍历您的列表,拆分它,将结果存储在device
中,然后获取该列表的第一个元素(这将是;
之前的字符串并追加/推/添加到{ {1}}:
a
答案 1 :(得分:1)
list(set([l.split[';'][0] for l in a]))
或
list(set(map(lambda l: l.split[';'][0], a)))
答案 2 :(得分:1)
import csv
with open('path/to/file') as infile:
answer = []
for row in csv.reader(infile, delimiter=';'):
answer.append(row[0])
这将为您提供没有uniq
的所有设备名称。以下内容uniq
,但您可能会丢失它们在文件中的显示顺序:
import csv
with open('path/to/file') as infile:
answer = set()
for row in csv.reader(infile, delimiter=';'):
answer.add(row[0])
如果你想维持原来的订单,你将不得不做一些繁重的工作:
import csv
with open('path/to/file') as infile:
answer = []
seen = set()
for row in csv.reader(infile, delimiter=';'):
dev = row[0]
if dev not in seen:
seen.add(dev)
answer.append(dev)