【问题标题】:Parse String Date and Value from CSV in Python [closed]在 Python 中从 CSV 解析字符串日期和值 [关闭]
【发布时间】:2021-09-07 12:30:59
【问题描述】:

我的 CSV 文件如下所示:

Date Value
September 03, 2021  220.32
September 02, 2021  220.43
September 01, 2021  219.74
August 31, 2021 219.34
August 30, 2021 229.55
August 27, 2021 218.33
August 26, 2021 216.26
August 25, 2021 208.34
August 24, 2021 207.43
...
May 11, 2021    200.41
May 10, 2021    302.71
May 07, 2021    304.89
May 06, 2021    303.34
May 05, 2021    301.67
May 04, 2021    301.55
May 03, 2021    302.91
April 30, 2021  302.39
April 29, 2021  303.86
April 28, 2021  302.48
April 27, 2021  302.64
April 26, 2021  302.69
April 23, 2021  302.33
April 22, 2021  300.14
...

如何在 Python 中解析该 CSV 文件,以便(新)CSV 如下所示?

Date;Value
03.09.2021;220.32
02.09.2021;220.43
01.09.2021;219.74
...
...

我没有任何尝试,因为我不知道该怎么做。

【问题讨论】:

  • 我们希望您展示研究和一些尝试,而不是为您编写代码。详情请参考help center
  • 更具体地说,我们不知道您的问题实际上是在读取文件、写入新文件还是只是解析日期。如果是后者,请将您的问题减少到minimal reproducible example。换句话说,您似乎在问,例如,“将字符串"September 03, 2021 220.32" 转换为其他字符串"03.09.2021;220.32"”...
  • 如果它是一次性转换,所以是单个文件,那么我只需将 , 2021 替换为 /2021 并将 April 替换为 04/ 等 12x每个月。然后日期就像04/24/2021,然后使用CSV工具转换分隔符和日期格式,如github.com/BdR76/CSVLint

标签: python csv date


【解决方案1】:

您可以使用内置的 datetime 模块或 pandas 来读取带有解析日期的 csv。

日期时间模块:

from datetime import datetime

dates = []
values = []

with open(path_to_csv) as csv: lines = csv.readlines()

for l in lines[1:]:
    dates += [datetime.strptime(' '.join(l.split()[:3]),"%B %d, %Y")]
    values += [l.split()[-1]]

with open(path_to_csv,'w') as csv:
    csv.write('Date;Value\n')
    for d,v in zip(dates,values):
        csv.write(f'{d.strftime("%d.%m.%Y")};{v}\n')

格式化关键字的链接: https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior

您可以在这里自己尝试 panda read_csv(更方便): Pandas read_csv

【讨论】:

    【解决方案2】:

    此功能将帮助您将每个有效行转换为您想要的格式。您可能需要改进此功能以进行验证,并可能需要处理包含列名的第一行

    from datetime import datetime
    
    def convert(line):
        arr = line.split(" ", 3)
        datestr = "{d}{m},{y}".format(d=arr[1],m=arr[0],y=arr[2])
        dateobj = datetime.strptime(datestr, '%d,%B,%Y')
        newdatestr = dateobj.strftime("%d.%m.%Y")
        valuestr = arr[3].strip()
        return "{date};{value}".format(date=newdatestr, value=valuestr)
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      相关资源
      最近更新 更多