【问题标题】:Exporting CSV via Python with headers & date formatting通过 Python 导出带有标题和日期格式的 CSV
【发布时间】:2023-03-11 02:36:02
【问题描述】:

我希望将 Export01.csv 的第一列格式化为 dd/mm/yyyy。遗憾的是,我导出时的当前格式是 dd/mm/yy mm:mm。

如果可能的话,有人可以帮我调整我的代码以在导入过程中更改日期吗?

import sys
import cx_Oracle
import csv

connection = cx_Oracle.connect('user','password','ORPM2') 
cursor = connection.cursor()


SQL="SELECT * FROM EXPORT01"
cursor.execute(SQL)

filename="C:\Projects\SQL_Export\Export01.csv"

with open(filename,"wb") as fout:
writer = csv.writer(fout)
writer.writerow([ i[0] for i in cursor.description ]) # heading row
writer.writerows(cursor.fetchall())

fout.close()
cursor.close()
connection.close() 

我在 Export01 中添加了前两列数据的样本

WEEK_ENDING         ORDER_HEADLINE
12/02/2016 00:00    Headline
15/01/2016 00:00    Headline
15/01/2016 00:00    Headline

【问题讨论】:

  • 使用“with”contextManager 时不需要关闭文件“fout”,还需要注意缩进级别。

标签: python csv date datetime cx-oracle


【解决方案1】:

如果您一次处理 fetchall 一行,则可以按如下方式转换第一列条目:

from datetime import datetime
import sys
import cx_Oracle
import csv


connection = cx_Oracle.connect('user','password', 'ORPM2') 
cursor = connection.cursor()
SQL="SELECT * FROM EXPORT01"
cursor.execute(SQL)
filename = r"C:\Projects\SQL_Export\Export01.csv"

with open(filename, "wb") as fout:
    writer = csv.writer(fout)
    writer.writerow([i[0] for i in cursor.description ]) # heading row

    for row in cursor.fetchall():
        cols = list(row)
        cols[0] = cols[0].strftime("%d/%m/%Y")
        writer.writerow(cols)

cursor.close()
connection.close()

另请注意,您使用的with 语句将在您离开文件范围时自动关闭文件。我还建议您在文件路径前加上 r,以避免 Python 试图转义路径中的任何反斜杠。

【讨论】:

  • 我收到以下错误 Martin........ Traceback(最近一次调用最后一次):文件“C:/Users/803261400/desktop/Export2.py”,第 25 行, in row[0] = datetime.strptime(row[0], "%d/%m/%y %H:%M").strftime("%d/%m/%Y") AttributeError :“模块”对象没有属性“strptime”
  • 对不起,忘记复制导入,您需要添加from datetime import datetime
  • 马丁,感谢您的帮助。我遇到了同样的错误............ Traceback(最近一次通话最后一次):文件“C:/Users/803261400/desktop/Export2.py”,第 23 行,在 行 [0] = datetime.strptime(row[0], "%d/%m/%y %H:%M").strftime("%d/%m/%Y") TypeError: must be string, not datetime.datetime >>>
  • 你知道你用的是哪个版本的Python吗?
  • 我假设第一列的类型是字符串。你能添加print type(row[0]) 并告诉我它在说什么吗?
猜你喜欢
  • 1970-01-01
  • 2017-04-13
  • 2020-01-01
  • 2020-07-01
  • 2021-10-29
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2020-08-30
相关资源
最近更新 更多