问题描述
我可以在这里使用一些帮助。我正在尝试将已转换为列表的日期时间索引附加到现有 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,2,1,-,8,:,5,4,1
2,9,1
然后预期的输出将是第 8-14 行中的相同值,但没有用逗号分隔
解决方法
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')