【问题标题】:How to append DateTime list to CSV without comma separated delimiters?如何在没有逗号分隔分隔符的情况下将 DateTime 列表附加到 CSV?
【发布时间】:2021-05-12 06:32:37
【问题描述】:

我可以在这里使用一些帮助。我正在尝试将已转换为列表的 DateTime 索引附加到现有的 CSV 文件中。当我运行代码时,列表确实按预期追加,但时间以逗号分隔,而用于追加数据的列表不是。我的代码如下

import csv
import numpy as np
import datetime
import pandas as pd

time_now = datetime.datetime.now() + datetime.timedelta(minutes = 5)
time_future = time_now + datetime.timedelta(minutes = 30)
time_predict = pd.date_range(time_now, time_future, freq = '5min')
time_predict_list = time_predict.strftime("%Y-%m-%d %H:%M:%S").tolist()

overwrite = input("Would You like to Overwrite or Append Prediction Data? Type (a) to Append, Type (o) to Overwrite: ")
if overwrite == "o":
    np.savetxt("time_list.csv",
               time_predict_list,
               delimiter =", ",
               fmt ='% s')

def append_list_as_row(file_name, list_of_elem):
    with open(file_name, 'a+', newline='') as file:
        csv_writer = csv.writer(file)
        csv_writer.writerows(list_of_elem)

if overwrite != "o":
    append_list_as_row('time_list.csv',time_predict_list)

实际输出:

2021-02-08 10:54:31
2021-02-08 10:59:31
2021-02-08 11:04:31
2021-02-08 11:09:31
2021-02-08 11:14:31
2021-02-08 11:19:31
2021-02-08 11:24:31
2,0,2,1,-,0,2,-,0,8, ,1,0,:,5,4,:,5,1
2,0,2,1,-,0,2,-,0,8, ,1,0,:,5,9,:,5,1
2,0,2,1,-,0,2,-,0,8, ,1,1,:,0,4,:,5,1
2,0,2,1,-,0,2,-,0,8, ,1,1,:,0,9,:,5,1
2,0,2,1,-,0,2,-,0,8, ,1,1,:,1,4,:,5,1
2,0,2,1,-,0,2,-,0,8, ,1,1,:,1,9,:,5,1
2,0,2,1,-,0,2,-,0,8, ,1,1,:,2,4,:,5,1

那么预期的输出将是第 8-14 行中的相同值,但没有用逗号分隔

【问题讨论】:

  • writerow 不是writerows。后者采用列表列表,而不是列表。字符串是可迭代的,看起来像一个单个字符的列表。

标签: python numpy csv datetime delimiter


【解决方案1】:

writerows 不正确。它需要一个列表列表。字符串列表看起来像列表列表,因为字符串是字符的可迭代对象。

使用writerow,但要将每个项目放在单独的行上,每个“行”都需要是行中项目的列表。在这种情况下,这是一个单一的项目:

for row in list_of_elem:
    csv_writer.writerow([row])

当您可以以所需的模式打开文件时,您实际上并不需要 csv 模块。将打开的文件传递给np.savetext

import datetime
import numpy as np
import pandas as pd

def append_list_as_row(file_name, list_of_elem):
    with open(file_name, 'a') as file:
        for row in list_of_elem:
            print(row,file=file)

time_now = datetime.datetime.now() + datetime.timedelta(minutes = 5)
time_future = time_now + datetime.timedelta(minutes = 30)
time_predict = pd.date_range(time_now, time_future, freq = '5min')
time_predict_list = time_predict.strftime("%Y-%m-%d %H:%M:%S").tolist()

overwrite = input("Would You like to Overwrite or Append Prediction Data? Type (a) to Append, Type (o) to Overwrite: ")

with open('time_list.csv', 'w' if overwrite == 'o' else 'a') as file:
    np.savetxt(file, time_predict_list, fmt='%s')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多