【问题标题】:Convert Excel to CSV - Properly Convert Date Fields [duplicate]将 Excel 转换为 CSV - 正确转换日期字段 [重复]
【发布时间】:2014-11-20 12:13:15
【问题描述】:

所以,我现在可以使用 Excel2CSV 函数,但遇到了另一个问题,其中我的 Excel 文件中的日期字段(“打开日期”、“关闭日期”)在 Excel 中被格式化为日期,被写为整数值转换为 CSV 时 (例如 1995 年 5 月 1 日转换为 34820)。

我希望它只是将这些日期写成纯文本(即 1995 年 5 月 1 日 - 或 1995 年 5 月 1 日,或类似的东西。人类可读的东西。)

def Excel2CSV(ExcelFile, SheetName, CSVFile):
     import xlrd
     import csv
     print "Acquiring " + ExcelFile + "..."
     workbook = xlrd.open_workbook(ExcelFile)
     print "Locating " + SheetName + " Worksheet..."
     worksheet = workbook.sheet_by_name(SheetName)
     print "Creating " + CSVFile + "..."
     csvfile = open(CSVFile, 'wb')
     print "Preparing to write CSV file..."
     wr = csv.writer(csvfile, quoting=csv.QUOTE_ALL)
     print "Writing CSV..."
     for rownum in xrange(worksheet.nrows):
         wr.writerow(
             list(x.encode('utf-8') if type(x) == type(u'') else x
                  for x in worksheet.row_values(rownum)))
     print "Closing CSV File..."
     csvfile.close()
     print "CSV successfully written."
     return CSVFile

我不确定如何按名称或值捕获日期字段,然后将值正确转换为纯文本。任何帮助表示赞赏。

【问题讨论】:

    标签: python excel date csv data-conversion


    【解决方案1】:

    要将日期数字转换为 Python datetime,请使用以下公式:

    dt = datetime.datetime(1899, 12, 30) + datetime.timedelta(days=num)
    

    完成后,您可以使用str(dt) 将其转换为默认格式,或使用dt.strftime(format) 指定您自己的格式。见datetime documentation

    【讨论】:

    • 你确定它总是正确的吗? http://www.cpearson.com/excel/datetime.htm 指定您至少还需要为 1900-Feb-28 之后的日期减去 1 天,并且可能还有小数部分。
    • @ivan_pozdeev 是的,这是真的。如果你关心那么旧的日期,你可能不应该在 Excel 中处理它们,所以我觉得没有必要指出它。
    • @ivan_pozdeev days 参数处理浮点数,所以小数部分也可以。
    • 我将如何只对实际上应该是日期的值执行此操作(即它们在我的两个日期字段之一中)。 Excel 电子表格中的其他字段具有整数值,我不想意外转换为日期。
    • @JohnDye:查看Cell.ctype 属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多