2016-03-05 74 views
1
在一个字符的前面添加零

我的输入csv文件看起来如下在Python

S.No第一第二第三

1 71.28 75.30 79.78

2 3.45 36.65 25.4

我目标是从每行的第一列,第二列和第三列中提取前两位数字。

我用列表来存储输出,如下所示。

['71','75','79'] 

['3.','36','25'] 

但我想有以下输出(代替“3”。我想,“03”)

['71','75','79'] 

['03','36','25'] 

我想我最好不过,但未能成功。我不确定我在哪里犯错。

我尝试:例如,让a=['1','2','34']

然后我用它输出01这正是我需要的, 但主文件的情况下,这是行不通的打印str(a[0].zfill(2))。 请帮帮我。

回答

3

你会想通过你的字符串列表,然后将它们中的每一个转换为float(因为它看起来像你有一些小数点),然后将它们转换为零填充数字。

data = ['3.','36','25']; 
new_data = ['%02d' % float(x) for x in data] 

format specifier '%02D',表明你想要一个整数( “d”),如果有少于2个位数将补零( “02”)。

如果您更喜欢format方法。

new_data = ['{0:02.0f}'.format(float(x)) for x in data] 

此格式说明意味着要零填充两位数字(“02”),接着零点十进制(” 0.0‘)之后并且在输入数据的类型是float(’F “)

注意:这两种解决方案都假设你不关心数据的任何非整数部分(如果有的话)。

+0

谢谢..它工作.. !!! – user1659936

2

使用'%'查找字符串格式。例如,您可以使用'%02d'来获取具有整数值的前导零。

0

嘛我不是一个Python程序员,但如果一个人有使用Regex解决它,然后下面的人会发现需要的号码。这是十进制前的单个数字。

正则表达式:\b(\d)\.\d*\b

说明:

  • \b在开始和结束维护字边界。

  • (\d)\.\d*匹配小数部分的单个数字,但仅捕获个位数。

更换做:0\1更换。其中\1是单个数字。

Regex101 Demo

注:我不是一个Python程序员。如果有人希望添加Python程序演示到这个答案继续前进。