gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:46:43 25 4
gpt4 key购买 nike

我从我的客户端获取了包含可变列数的 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/yyyydd-MM-yyyy

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

最佳答案

首先,阅读它作为 Python datetime.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 将是 %m/%d/%Y strptime 格式(实际上是 C 标准格式),而 dd -MM-yyyy 将是 %d-%m-%Y

现在我不确定您是否希望 python 脚本“自动发现”日期,或者您是否希望能够手动指定适当的列和格式。所以我会为两者建议一个脚本:

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

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_FORMATS 中指定的所有格式解析输入文件中的每个字段,并将使用 OUTPUT_DATE_FORMAT 格式化的所有这些日期编写一个新文件:

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 = ('%m/%d/%Y', '%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
for date_format in INPUT_DATE_FORMATS: # try to parse a date
try:
parsed_date = datetime.strptime(value, date_format)
row[header] = parsed_date.strftime(OUTPUT_DATE_FORMAT)
except ValueError:
pass
writer.writerow(row)

关于python - 使用 Python 格式化文件中的日期字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39250152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com