0

スプレッドシート (CSV) の行を適切な値のリスト [] と比較し、不適切な行のブラックリストを作成したい (ホワイトリストにない値を含む行はファイルに出力される) .

if any(item in row[4] for item in lisst):
    print(rowEdit) #scaffolding
    writer.writerow(rowEdit)

すべてをホワイトリストの項目に一致させ、ファイルに書き込みます

if any(item in row[4] for item not in lisst):
    print(rowEdit)
    writer.writerow(rowEdit)

手動で編集してホワイトリストに追加するには、ホワイトリストに登録されていないファイルの部分を印刷する必要があるようです。そうではありません。

私がソートしているデータは、資産データを含む CSV ファイルです。行[4]リスト項目であるOSごとに分割して出力したい。
インデントがちょっとズレてる…

    import csv

def main():
choice = "chew"
filename=raw_input("enter the filename==>  ")
while choice != "swallow":

    os_choice = raw_input('Enter  "1" for Linux,\n       "2" for Windows\n       "3" for all others and\n       "4" to exit the script =>  ')

    qu = ""
    if os_choice == "1":
        qu = "nix"
    elif os_choice == "2":
        qu = "win"
    elif os_choice == "3":
        qu = "other"
    elif os_choice == "4":
        choice = "swallow"
        break
    else: continue
    #t=titleblock(filename)
    #L=labels(filename)
    c=content(filename, qu)

#   print(t,'\n',c,'\n',r,'\n')
return 0

def content(filename, qu):

with open(qu+'_content_'+filename, 'wb') as content:
    writer = csv.writer(content)
    with open(filename, 'rb') as mycsv:
        reader = csv.reader(mycsv)
        counter = 0

        for counter,row in enumerate(reader):
            if counter < 7: continue
#               if counter > ([-2:]) : break # This string-slicing technique doesn't work on lists made by csv module for some reason
            rowEdit = [row[0],row[22],row[2], row[4], row[6], row[15], row[16], row[11], row[18], row[19], row[20], row[25], row[26], row[27], row[28], row[29], row[30], row[31]]
            chklist=["OS", "Linux 2.4-2.6 / Embedded Device", "Linux 2.4-2.6", "Linux 2.6", "Red Hat Enterprise Linux ES 4", "Red Hat Enterprise Linux Server 5.8", "Linux*"]
            chklist2 = "Linux"
            wchklist=["OS", "Windows Server 2003 Service Pack 2", "Windows Server 2008 R2 Enterprise 64 bit Edition Service Pack 1","Windows"]
            ochklist=chklist+wchklist
            if qu == "nix":
                lisst = chklist
                if any(item in row[4] for item in lisst):
                    #print(rowEdit)
                    writer.writerow(rowEdit)
            elif qu == "win":
                lisst = wchklist
                if any(item in row[4] for item in lisst):
                    #print(rowEdit)
                    writer.writerow(rowEdit)
            elif qu == "other": 
                lisst = ochklist
                splisst = set(lisst)
                #if any(item not in row[4] for item in lisst):
                if splisst & row[4].split():
                    print(rowEdit)
                    writer.writerow(rowEdit)

最後に - type() を探していたことが明らかになりました - いつものように、私は頑張りすぎていました。

elif qu == "other": 
lisst = ochklist
if row[4] not in lisst:
    #print("eureka")
    #print(rowEdit)
    writer.writerow(rowEdit)

私がそれを解決するのを手伝ってくれてありがとう.!

4

1 に答える 1

3

テストとループを混同しています。ジェネレーター式のテスト式に移動notします。in

if any(item not in row[4] for item in lisst):

このfor item lisst部分は要素をループしlisst、ジェネレータ式の最初の部分は実際のテストです。

の構造によってrow[4]は、ホワイトリストをセットにした方がパフォーマンスが向上する場合があります。

whitelist = set(lisst)

if whitelist.intersection(row[4].split()):
    # True if any whitespace separated value in `row[4]` is a member of whitelist too
于 2013-06-03T15:21:43.280 に答える