使用Python格式化文件中的日期字符串

2024-09-29 21:40:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我从我的客户机得到csv文件,其中包含可变数量的列。在这些列中,可能有一些列包含日期字符串,但未定义顺序,例如:

column1str|column2dt|column3str|column4int|column5int|column6dt
ab c1|10/20/2010|1234|10.02|530.55|30-01-2011
ab c2|10/10/2010|12346|11.03|531|05-05-2012
abc3|10/10/2010|122|12|532.44|11-09-2008
abc4|10/11/2010|110|13|533|01-11-2013
abc5|10/10/2010|11111|14|534|30-02-2012

我从客户端得到日期字符串的格式作为输入,在上面的输入中有两种格式的日期字符串MM/dd/yyyy和{}。在

我想转换文件中所有日期的格式dd-MM-yyyyTHH:mmZ。我知道当输入日期格式给定时,如何将日期字符串转换为所需的日期字符串。我在这里面临的挑战是如何替换文件中特定列的日期字符串。在


Tags: 文件csv字符串数量客户机ab顺序格式
2条回答

首先,请阅读本文以供Python参考日期时间.strptime()格式字符串: https://docs.python.org/3.5/library/datetime.html#strftime-strptime-behavior

以及CSV解析:https://docs.python.org/3.5/library/csv.html

我的答案将只使用标准Python。作为一个有效的替代方案,您可以使用一个专门的数据分析库,如已经建议的pandas。在

您的MM/dd/yyyy将是strptime格式的%m/%d/%Y(实际上是C标准格式),而{}将是{}。在

现在我不确定您是希望python脚本“自动发现”日期,还是希望能够手动指定适当的列和格式。因此,我建议两个脚本:

这将转换“输入日期格式”映射中指定的列名称和输入格式中的所有日期:

from datetime import datetime

import csv

# file that will be read as input
INPUT_FILENAME = 'yourfile.csv'
# file that will be produced as output (with properly formatted dates)
OUTPUT_FILENAME = 'newfile.csv'


INPUT_DATE_FORMATS = {'column2dt': '%m/%d/%Y', 'column6dt': '%d-%m-%Y'}

OUTPUT_DATE_FORMAT = '%d-%m-%YT%H:%MZ'

with open(INPUT_FILENAME, 'rt') as finput:
    reader = csv.DictReader(finput, delimiter='|')
    with open(OUTPUT_FILENAME, 'wt') as foutput:
        writer = csv.DictWriter(foutput, fieldnames=reader.fieldnames, delimiter='|') # you can change delimiter if you want
        for row in reader: # read each entry one by one
            for header, value in row.items(): # read each field one by one
                date_format = INPUT_DATE_FORMATS.get(header)
                if date_format:
                    parsed_date = datetime.strptime(value, date_format)
                    row[header] = parsed_date.strftime(OUTPUT_DATE_FORMAT)
            writer.writerow(row)

这将尝试使用input_DATE_格式指定的所有格式来解析输入文件中的每个字段,并将这些日期用OUTPUT_DATE_格式格式化后写入一个新文件:

^{pr2}$

试试这个:

import pandas as pd
data=pd.read_csv('so.txt',delimiter='|',parse_dates=['column2dt','column6dt'])

相关问题 更多 >

    热门问题