2013-08-13 2 views
-1

Я пытаюсь создать список python из файла CSV. Мой файл CSV имеет 5 столбцов, как показано ниже, разделенных вертикальной чертой (|):Python создать список из CSV

QTP|Install|C:\Cone_Automation\RunTest.vbs|Install|Sequence 
QTP|Open |C:\Cone_Automation\RunTest.vbs|Open |Sequence 
QTP|Install|C:\Cone_Automation\RunTest.vbs|Install|Parallel 
QTP|Install|C:\Cone_Automation\RunTest.vbs|Install|Parallel 
QTP|Install|C:\Cone_Automation\RunTest.vbs|Install|Parallel 
QTP|Open |C:\Cone_Automation\RunTest.vbs|Open |Sequence 
QTP|Install|C:\Cone_Automation\RunTest.vbs|Install|Sequence 
QTP|Open |C:\Cone_Automation\RunTest.vbs|Open |Parallel 
QTP|Open |C:\Cone_Automation\RunTest.vbs|Open |Parallel 
QTP|Open |C:\Cone_Automation\RunTest.vbs|Open |Parallel 

выше, мои тестовые примеры в формате CSV.

Я хочу создать список, основанный на последнем столбце файла. Мне нужен список как, если первые две строки имеют текст «последовательность» в столбце [4], тогда я должен получить полную строку в списке Seq1.

Если строка 3, 4 и 5 имеет Parallel, тогда я должен получить полные 3-й, 4-й и 5-й записи в списке Par1.

После этого, если у меня есть Sequence в строках 6 и 7, тогда я должен получить список в Seq2.

После этого, если у меня есть текст Parallel, тогда я должен получить список как Par2.

Как я могу достичь этого с помощью Python?

+2

Добро пожаловать в StackOverflow! что ты уже испробовал? – richie

ответ

0

Google - Python CVS

>>> import csv 
>>> with open('eggs.csv', 'rb') as csvfile: 
...  spamreader = csv.reader(csvfile, delimiter='|', quotechar=' ') 
...  for row in spamreader: 
...   print ', '.join(row) 
Spam, Spam, Spam, Spam, Spam, Baked Beans 
Spam, Lovely Spam, Wonderful Spam 

Где row представляет собой список, содержащий объекты на этой строке. Вы можете добавить строку в другой список, давая, возможно, то, что вы хотите.

1

Я не знаю, почему вы должны отделенный seq1 и seq2 или будет seq3 и так далее, но вот как вы можете проверить файл:

import csv 

seq1 = [] 
par1 = [] 
with open('test.csv', 'rb') as f: 
    r = csv.reader(f, delimiter='|', quotechar=' ') 
    for row in r: 
     if row[-1] == "Sequence": 
      seq1.append(row) 
     else: 
      par1.append(row) 

print seq1 
print par1 

Выход:

[['QTP', 'Install', 'C:\\Cone_Automation\\RunTest.vbs', 'Install', 'Sequence'], ['QTP', 'Open ', 'C:\\Cone_Automation\\RunTest.vbs', 'Open ', 'Sequence'], ['QTP', 'Open ', 'C:\\Cone_Automation\\RunTest.vbs', 'Open ', 'Sequence'], ['QTP', 'Install', 'C:\\Cone_Automation\\RunTest.vbs', 'Install', 'Sequence']] 
[['QTP', 'Install', 'C:\\Cone_Automation\\RunTest.vbs', 'Install', 'Parellel'], ['QTP', 'Install', 'C:\\Cone_Automation\\RunTest.vbs', 'Install', 'Parellel'], ['QTP', 'Install', 'C:\\Cone_Automation\\RunTest.vbs', 'Install', 'Parellel'], ['QTP', 'Open ', 'C:\\Cone_Automation\\RunTest.vbs', 'Open ', 'Parellel'], ['QTP', 'Open ', 'C:\\Cone_Automation\\RunTest.vbs', 'Open ', 'Parellel'], ['QTP', 'Open ', 'C:\\Cone_Automation\\RunTest.vbs', 'Open ', 'Parellel']] 

Итак, если вам нужно их разделить, просто добавьте, если заявления при добавлении к списку


Возможно, вместо создания большого количества переменных, таких как seq1, seq2 и т. Д., Вы можете создать каталог списка? Например:

import csv 

d = {} 
countSequence = 1 
countParallel = 1 

with open('kres.csv', 'rb') as f: 
    r = csv.reader(f, delimiter='|', quotechar=' ') 
    for row in r: 
     if row[-1] == "Sequence": 
      d["seq" + str(countSequence)] = row 
      countSequence += 1 
     else: 
      d["par" + str(countParallel)] = row 
      countParallel += 1 

print d["seq1"] 

Выход:

['QTP', 'Install', 'C:\\Cone_Automation\\RunTest.vbs', 'Install', 'Sequence'] 

Так что, если вам нужно второй параллельной группы, вы просто назвать его так:

print d["par2"] 
+0

И знаете ли вы, сколько секций и пар вам нужно? – ton1c

+0

Мне нужен seq1, затем par1, затем seq2, затем par2, как если бы они отображались в строках csv. Это тестовые примеры, которые мне нужно запускать последовательно, если они работают последовательно, а затем параллельно, если у них есть слово parllel. Если мои 50 тестовых случаев находятся в parellel, тогда я собираюсь выполнить его на parellel mahines. Мне нужен список, как он появляется в csv. Например, если первые 10 тестовых примеров являются секвенциальными, тогда он должен идти в seq1. то если следующие 30 случаев в parrlel, то он должен идти в par1.Затем снова, если 5 находятся в seq, тогда он должен идти в seq2 и аналогично. Это то, как я хочу, чтобы это снова стало вашим ответом. –

+0

Да. Это зависит от того, сколько параллельных и последовательных блоков тестовых случаев мы предоставляем. Но если я могу создать 2 пар и 2 сек. Списка, это также поможет. –

0
Hi Thanks for your reply. Here how I did it. 

import csv 

class RecordDetails: 
    Token = "" 
    Records = [] 

csv_file = 'E:\\Automation_STAF\\AutomationDriver.csv' 
testList = list(csv.reader(open(csv_file, 'r'))) 
curToken = "null" 

recordDetails = RecordDetails() 
recordDetails=None 
records = [RecordDetails] 

for index, line in enumerate(testList): 
    token="null" 
    token = testList[index][4] 

    if token=="null": 
     continue 
    if curToken !=token: 
     curToken =token 
     recordDetails = RecordDetails() 
     recordDetails.Token = curToken 
     recordDetails.Records=[] 
     records.append(recordDetails) 
    if recordDetails!=None: 
     recordDetails.Records.append(line) 

    #print(line) 

#print(len(records)) 
#seq1=records[1].Records 
#seq2=records[2].Records 
#seq3=records[3].Records 
#print(seq3) 
d={} 
CountSequence=1 
#Listcount = len(records) 
for i, obj in enumerate(records): 
    if records[i].Token=="Sequence": 
     d["seq" + str(CountSequence)] =records[i].Records 
     CountSequence +=1 
    if records[i].Token=="Parallel": 
     d["par" + str(CountSequence)] =records[i].Records 
     CountSequence +=1 
print(len(records)) 
print (d["seq1"]) 
print (d["par2"]) 
print (d["seq3"]) 


Now here I am able to get all the directory of list. Thank you again for your help. 
Смежные вопросы