使用迭代器生成 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]
]
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]
]