首页 > 解决方案 > 从 csv 重新格式化日期并将它们写入新的 csv

问题描述

我刚开始学习python,以便我可以制作一个可以操作银行对帐单cvs文件的程序,但我不太了解。我有一个 csv 文件,其中包含一列日期,格式为:月+日+年。示例包括 3/3/20、12/2/20、9/13/20 等。

我想从列中获取这些日期并将它们重新格式化为格式:年+月+日。我需要它们的格式示例包括 200303、201202、200913 等。

但我不知道如何从我的原始 csv 文件中获取信息并继续对其重新排序并将其写入我的新 csv 文件。我需要对这些步骤进行大量解释,因为我对此很陌生。尽管所有帮助都表示赞赏:)

这是我到目前为止所尝试的:

        bank_statement = '/Users/annamobley/Library/Mobile Documents/com~apple~CloudDocs/Python/3 March 2020.csv'
# import initial bank statement
import csv

with open(bank_statement, 'rt')as initial_file:
    data = csv.reader(initial_file)
    for row in data:
        original_dates = str(row[1])

# find number of rows in the initial bank statement
file = open(bank_statement)
reader = csv.reader(file)
lines = len(list(reader))
num_lines = int(lines) - int(1)

# variables in new csv
upload_statement = 'manip_bank_statement.csv'
bank_abbreviation = "GCB"
acc_num = input('Enter the account number : ')
acc_name = input("Enter the Account Name/Description (): ")
# date format manipulation
first_2_num_year = input(
    "Input the first two numbers in the year that it is currently. Ex: If it is the year 2019, input '20': ")
import datetime as dt

post_date_original = row[1]
manipulated_date = (dt.datetime.date(dt.datetime.strptime(original_dates, '%m/%d/%y')).strftime('%y%m%d'))
final_date = str(first_2_num_year + manipulated_date)
# writing the new csv
import csv

with open(upload_statement, 'w', newline='') as file:
    writer = csv.writer(file)
    for somevariable in range(num_lines):
        writer.writerow([bank_abbreviation, acc_num, acc_name, final_date])

我收到错误消息:

        Traceback (most recent call last):
  File "/Users/annamobley/PycharmProjects/CSV_Manipulation_Project/Project.2.redo.py", line 41, in <module>
    manipulated_date = (dt.datetime.date(dt.datetime.strptime(original_dates, '%m/%d/%y')).strptime('%y%m%d'))
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/_strptime.py", line 568, in _strptime_datetime
    tt, fraction, gmtoff_fraction = _strptime(data_string, format)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/_strptime.py", line 352, in _strptime
    raise ValueError("unconverted data remains: %s" %
ValueError: unconverted data remains: 19

标签: pythoncsv

解决方案


您可以使用该datetime模块转换日期。

import datetime as dt

day = '3/3/20'

print(
    dt.datetime.date(
        dt.datetime.strptime(day, '%m/%d/%y')
    ).strftime('%y%m%d')
)

Output:
200303

这是datetime模块https://docs.python.org/3/library/datetime.html的一个很好的资源


推荐阅读