【问题标题】:Format the parsed csv file in Python在 Python 中格式化解析的 csv 文件
【发布时间】:2018-01-24 12:46:31
【问题描述】:

我有一个格式如下的 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']

【问题讨论】:

  • 如果你想要它作为一个单一的字符串,为什么要使用 csv?
  • 你明白输出中的引号字符实际上并不是你输出的一部分吗?这就是 Python 打印字符串列表的方式。
  • 修复分隔符,csv 模块将为您进行转换。我认为,这就是您首先使用该软件包的原因
  • 你的意思是['21/10/2017 0:00', '123,85', '88,8']
  • @MadPhysicist 我认为这不是 OP 想要的,但我也不明白他们为什么想要像 ['21/10/2017 0:00;123,85;88,8'] 他们可能的意思是:['21/10/2017', '0:00;123,85;88,8']

标签: python csv quotes


【解决方案1】:

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

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

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

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

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

现在,要获得实际数字,您需要将这些字符串转换为值。 第二个和第三个或多或少是直截了当的,但你需要注意那个逗号。您拥有的值是使用十进制值用逗号分隔的语言环境,python 需要一个点。因此,我们可以将它们转换如下(让linereader 的一行):

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(':')]

我希望这足够清楚并且符合您的需要

【讨论】:

  • 这将被;分割,这意味着输出将是['21/10/2017 0:00', '123,85', '88,8'],这不是OP想要的。
  • 从问题的措辞来看,我相信 OP 想要的是解析 csv 中的 data ,这就是这样做的。我确实理解这个问题的字面解释是“我如何逐行读取文件”,但我相信这不是 OP 真正想要的
  • 我添加了问号,但之后我得到了这是时间:0:00' 这是这一天:['21 所以我仍然得到我不想要的字符。我想将 21 天设为整数,python 也解释 [',所以我收到错误消息。我想从这里省略 [' 并且只得到 21
  • 您能澄清一下“添加问号”是什么意思吗?
  • @MadPhysicist 完成 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-07
  • 1970-01-01
  • 2021-08-04
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多