-1

CSV ファイルから Python リストを作成しようとしています。私の CSV ファイルには、以下に示すように、パイプ (|) で区切られた 5 つの列があります。

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での私のテストケースです。

ファイルの最後の列に基づいてリストを作成したいと考えています。最初の 2 行の column[4] に「sequence」というテキストが含まれている場合、 list で完全な行を取得する必要があるため、リストが必要Seq1です。

3行目、4行目、5行目にある場合は、 list で3行目、4行目、5行目Parallelの完全なレコードを取得する必要がありますPar1

その後、Sequence 6 行目と 7 行目にある場合は、 でリストを取得する必要がありますSeq2

その後、テキストを として持っている場合はParallel、リストを として取得する必要がありますPar2

Pythonを使用してこれを達成するにはどうすればよいですか?

4

3 に答える 3

1

なぜ分離する必要があるのか​​ わかりませんがseq1seq2ファイル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']]

したがって、それらを分離する必要がある場合は、リストに追加するときに if ステートメントを追加するだけです


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']

したがって、2 番目の並列グループが必要な場合は、次のように呼び出します。

print d["par2"]
于 2013-08-13T11:54:01.667 に答える
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その行のオブジェクトを含むリストはどこにありますか。行を別のリストに追加して、おそらく必要なものを与えることができます。

于 2013-08-13T11:45:36.177 に答える
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.
于 2013-08-14T08:29:47.163 に答える