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 回答