2012-07-07 48 views
2

在Python 3.2中将数字拆分为前3位数和后2位等数字后,有什么方法可以显示前导零?我的脚本返回的数字,没有前导零...如何在Python中拆分数字后显示前导零

我有一个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 

回答

6

csv.writer不会将字符串转换为数字类型,因此它不会导致您所看到的错误。

我希望您正在Excel中查看您的csv文件,它将字符串转换为数字,只要它可以。在文本编辑器中查看你的输出结果,你应该看到前面的零实际在那里。

另外,正如其他人指出你的第一个切片应该是row[1][0:3]

+2

+1对OP的输出来自哪里的第一个很好的解释! – DSM 2012-07-07 14:54:34

+0

是的,我正在Excel中查看csv。所以你不可能把数字保存在csv中的字符串中?至于切片,这是我的错误。对于混淆 – fairyberry 2012-07-07 15:38:26

+0

我现在远离Windows机器,但我相信你可以在csv文件上使用文本导入向导。 – 2012-07-07 15:46:34

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为变量名是一个坏主意。这是一个非常方便的内置的名称。

+0

我试过了脚本。我也改变了所有的abc,但仍然没有返回前导零.. – fairyberry 2012-07-07 15:25:18

+0

什么是“不返回前导零”呢?它正在生成一个文件。该文件包含一个零或它不包含,并且我愿意承担它的好处。你在Excel中查看文件,就像@StevenRumbalski猜到的一样? – DSM 2012-07-07 15:28:06

+0

感谢您的帮助。问题解决了! – fairyberry 2012-07-07 16:23:34