2

Python 3.2 で数字を最初の 3 桁と最後の 2 桁のように分割した後に先頭のゼロを表示する方法はありますか? 私のスクリプトは、先行ゼロのない数字を返します...

次のような csv ファイルがあります。

Name,Code
blackberry,20001
wineberry,02002
rasberry,30000
blueberry,03010

私の望む出力:

Name,Code,Code1,Code2
blackberry,20001,200,01
wineberry,02002,020,02
rasberry,30000,300,00   
blueberry,03010,030,10

私のスクリプト:

import csv
all = []
with open('aaa.csv','r') as csvinput:
    with open('bbb.csv', 'w') as csvoutput:
        reader = csv.reader(csvinput,delimiter=',')
        writer = csv.writer(csvoutput,delimiter=",", lineterminator='\n')
        row = next(reader)
        row.append('Code1')
        row.append('Code2')
        all.append(row)
        for row in reader:
            row.append(row[1][0:2])
            row.append(row[1][-2:])
            all.append(row)
        writer.writerows(all)
        print(all)

上記のスクリプトは次を返します。

Name,Code,Code1,Code2
blackberry,20001,200,1
wineberry,02002,20,2
rasberry,30000,300,0    
blueberry,03010,30,10
4

2 に答える 2

6

csv.writer文字列を数値型に変換しないため、表示されているエラーは発生していません。

可能な限り文字列を数値に変換する Excel で csv ファイルを表示していると思います。出力をテキスト エディターで見ると、先頭のゼロが実際にあることがわかります。

また、他の人が指摘したように、最初のスライスはrow[1][0:3].

于 2012-07-07T14:53:16.847 に答える
2

あなたのコードがこの出力をどのように生成したのかわかりません。しかし、スペルミスを修正し、forループを次のように変更します

    for row in reader:
        row = [r.strip() for r in row]
        row.append(row[1][0:3])
        row.append(row[1][3:])
        all.append(row)

行末で問題を引き起こしている可能性のある誤った空白に関係なく、動作するはずです。

localhost-2:coding $ more bbb.csv 
Name,Code,Code1,Code2
blackberry,20001,200,01
wineberry,02002,020,02
raspberry,30000,300,00
blueberry,03010,030,10

PS:all変数名として使用するのは悪い考えです。とても便利なビルトインの名前です。

于 2012-07-07T14:44:49.117 に答える