【问题标题】:why does my csv contain a different format than my script为什么我的 csv 包含的格式与我的脚本不同
【发布时间】:2020-10-03 02:54:15
【问题描述】:

我编写了一些代码来标准化 CSV 日期的格式。第一列可以包含两种不同的时间格式:06/13/20 和 06.13.2020

我希望所有数据看起来像 06/13/20。

with open(fileread) as f:
    readCSV = csv.reader(f, delimiter=';')
    for row in readCSV:
        try:
            datetime_object = datetime.datetime.strptime(row[0], '%m.%d.%Y') # get date
            datetime_object = datetime_object.strftime('%m/%d/%y')
            print(datetime_object)
            save = datetime_object
        except:
            save = row[0]
        with open(filewrite, '+a', newline='') as g:
            out = [save, row[1], row[2], row[3], row[4]]
            writer = csv.writer(g, delimiter=';')
            print(out)
            writer.writerow(out)

注意:我使用“保存”是因为我认为row[0] 中会保存某种格式。我用row[0]而不是save试了一下,没有其他效果。

所以“out”的终端输出如下所示:

['06/02/20',...]

但在 CSV 中它仍然是 06.13.2020

【问题讨论】:

  • 您在文件打开行中使用了追加模式(在“+a”中用“a”标记),因此您更正的格式行被追加而不是覆盖。
  • 小建议:不需要每次都打开输出文件和创建CSV writer。我会把它移到 for 循环之外。这样你就不需要像@DavidWierichs 指出的那样应用了。
  • 是的,我把它移到外面,但是对大卫:新文件中没有正确的行,所以它们没有附加,它们不存在

标签: python csv datetime


【解决方案1】:

试试下面的代码。

我移动了打开输出文件并在 for 循环之外创建 CSV 编写器的代码。 strptime 抛出 ValueError 如果提供的字符串与提供的格式不匹配,因此我缩小了捕获范围。

你必须检查你是否真的想要第二行的追加。查看Python docs 了解可用的打开模式。

with open(fileread) as f:
    with open(filewrite, '+a', newline='') as g:
        readCSV = csv.reader(f, delimiter=';')
        writer = csv.writer(g, delimiter=';')
        for row in readCSV:
            save = row[0]
            try:
                datetime_object = datetime.datetime.strptime(row[0], '%m.%d.%Y') # get date
                save = datetime_object.strftime('%m/%d/%y')
            except ValueError:
                pass
            out = [save, row[1], row[2], row[3], row[4]]
            print(out)
            writer.writerow(out)

编辑:最后三行缺少缩进

修复后我使用以下输入进行了测试:

06.13.2020;a;b;c;d
7/2/00;a;b;c;d

得到了

06/13/20;a;b;c;d
7/2/00;a;b;c;d

【讨论】:

  • 那段代码不仅写了一行,格式还是一样..
  • 对不起,我错误地缩进了最后三行。它们显然属于 for 循环;)
  • mhh .. “行”中可能存在某种隐藏格式,因为如果我在 excel 中打开该文件,它的格式仍然错误。正确的行格式为“标准”,错误的行格式为“日期”..
  • 尝试在文本编辑器中打开文件,而不是 Excel。这将显示文件的真实内容。
  • Excel 解释数据并尝试猜测内容。我认为在导入 CSV 数据时可以选择忽略单元格类型。如果您需要 Excel 正确显示,可以尝试选择整列并手动将单元格类型设置为“日期”。
猜你喜欢
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 2012-07-30
  • 2019-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多