在Python中格式化解析的csv文件

时间:2018-01-24 12:46:31

标签: python csv quotes

我有一个csv文件,格式如下

21/10/2017 0:00;123,85;88,8

我使用命令解析它

with open('parseme.csv') as csv_file:
reader = csv.reader(csv_file)

所以我得到了值

['21/10/2017 0:00;123', '85;88', '8']

问题是我希望日期之后的值完全是因为由于逗号之前和之后的中间的引号字符,我无法将其转换为整数。如何在CSV中导入它,如下所示:

['21/10/2017 0:00', '123,85', '88,8']

1 个答案:

答案 0 :(得分:2)

首先,你需要通过拆分你正在使用的实际分隔符来获取csv字段(这是一个分号,而不是一个逗号):

csv.reader(csvfile, delimiter=';')

现在迭代reader的结果将是一系列字符串列表,如下所示:

['21/10/2017 0:00', '123,85', '88,8']

注意:这是字符串的python表示, '字符实际上不是数据的一部分

现在,要获得实际数字,您需要将这些字符串转换为值。 第二个和第三个或多或少是直截了当的,但你需要照顾那个逗号。您拥有的值是使用一个区域设置,其中十进制值由逗号分隔,python需要一个点。因此,我们可以将它们转换为如下(让line成为reader中的一行):

second_number = float(l[1].replace(',','.'))
third_number = float(l[2].replace(',','.'))

日期更复杂。假设您只对日期中的数字感兴趣而不是完全转换为某个datetime值,那么您可以这样做:

date, time = line[0].split(' ') #separate "21/10/2017" from "0:00"
day, month, year = [int(v) for v in date.split('/')]
hour, minute = [int(v) for v in time.split(':')]

我希望这很清楚并且符合你的需要