使用迭代器生成 csv 行

csv row generate with iterator

Python3.8.10

我正在创建多个 csv 文件,每行包含不同数量的项目。它们将在情节中使用。 Headers 稍后使用 csv.writerow(headers) 添加。 每行中的第一个项目是 date-string,该行中的其余项目是 0(整数零),零的数量不同,具体取决于我创建的 csv。我尝试了 list.append 和 list.extend,但它们没有将零添加到同一行。我尝试创建一个迭代器,但无法正确创建。使用 pandas 或其他东西可能有更好的方法,但我没有那么有经验。 输出应如下所示:

2022-01-09 18:08:18,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2022-01-09 18:13:18,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2022-01-09 18:18:18,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2022-01-09 18:23:18,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2022-01-09 18:28:18,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2022-01-09 18:33:18,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2022-01-09 18:38:18,0,0,0,0,0,0,0,0,0,0,0,0,0,0

谢谢。

def daterange(start_date, end_date,period):
# create dates every period for date range.
    deltaT = timedelta(seconds=period) 
    while start_date < end_date:
        yield start_date
        start_date += deltaT


def createData(hourIncrement=24,period=30,count=2282):
#creates data for specified number of hours
    end_date = datetime.now()
    start_date = end_date - timedelta(hours=hourIncrement)
    csvData=[]
    for single_date in daterange(start_date, end_date, period):
        csvData.append[single_date.strftime("%Y-%m-%d %H:%M:%S"),(0 for n in range(0,count))]
    listCount=len(csvData)
    logger.debug('Create CSV data count: ' + str(listCount))
    return csvData

这可行,但不是很 pythonic...

end_date = datetime.now()
start_date = end_date - timedelta(hours=hourIncrement)
x=0
csvData=[]
list1=[0]*(count-1)
for single_date in daterange(start_date, end_date, period):
    list0=[]
    list0=[single_date.strftime("%Y-%m-%d %H:%M:%S")]
    for i in list1:
        list0.append(i)
    csvData.append(list0)
listCount=len(csvData)
logger.debug('Create CSV data count: ' + str(listCount))
return csvData

这是该代码的更 pythonic 版本:

from datetime import datetime, timedelta


def daterange(start_date, end_date, period):
    # create dates every period for date range.
    while start_date < end_date:
        yield start_date
        start_date += timedelta(seconds=period)


def createData(hourIncrement=24, period=30, count=2282):
    # creates data for specified number of hours
    start = datetime.now() - timedelta(hours=hourIncrement)
    end = datetime.now()
    return [[x.strftime(
            "%Y-%m-%d %H:%M:%S")] + [0] * (count-1) for x in daterange(start, end, period)]


print(createData(24, 8000, 5))

->

[
    ['2022-01-09 22:55:06', 0, 0, 0, 0], 
    ['2022-01-10 01:08:26', 0, 0, 0, 0], 
    ['2022-01-10 03:21:46', 0, 0, 0, 0],
    ['2022-01-10 05:35:06', 0, 0, 0, 0], 
    ['2022-01-10 07:48:26', 0, 0, 0, 0], 
    ['2022-01-10 10:01:46', 0, 0, 0, 0], 
    ['2022-01-10 12:15:06', 0, 0, 0, 0], 
    ['2022-01-10 14:28:26', 0, 0, 0, 0], 
    ['2022-01-10 16:41:46', 0, 0, 0, 0], 
    ['2022-01-10 18:55:06', 0, 0, 0, 0], 
    ['2022-01-10 21:08:26', 0, 0, 0, 0]
]