1

列を追加または削除することにより、ユーザーが提供するCSVの行数に応じて機能する単純な関数を作成しました。

def sanExt(ifpath, ofpath):
    with open(ifpath, "rb") as fin, open(ofpath, "wb") as fout:
        csvin = csv.reader(fin)
        csvout = csv.writer(fout, delimiter=",")
        fline = csvin.next()
        if len(fline) == 33:
            for row in csvin:
                row.insert(10, "NULL")
                csvout.writerow(row)
            print "AG"
        elif len(fline) == 35:
            print "AI"
        elif len(fline) == 36:
            print "AJ"
        else:
            print "Unknown"

ifコードが機能することを確認するために、最初のステートメントで停止しました。この場合、列は適切に追加されますが、ヘッダーがありません。

だけでなく、すべての行がファイルに書き込まれていることを確認するにはどうすればよい[1:len(rows)]ですか?

私の方法は、目的の仕事をするための適切なpythonic方法ですか?

4

2 に答える 2

2

csv.DictReader列名を介してアクセスする必要がない場合、従来のソリューションは次のようなものに基づいています。

with open('in.csv') as fin, open('out.csv', 'wb') as fout:
   csvin = csv.reader(fin)
   csvout = csv.writer(fout)
   try:
       header = next(csvin)
       csvout.writerow(header)
   except StopIeration as e:
       pass # empty file - either handle, or we'll just continue and drop out of loop

   for row in csvin:
       csvout.writerow(row) # do some real work here...
于 2012-07-24T10:54:42.393 に答える
1

csv.DictReader、csv.DictWriter、およびそのwriteheader ()メソッドを使用して、余分なコードをほとんど含まないヘッダー行を処理します。

于 2012-07-24T10:16:49.837 に答える