Python 写入CSV时跳过行
我编写了一个脚本,从两个不同的API收集数据,但我很难将其全部显示在一行上,而是显示如下:Python 写入CSV时跳过行,python,csv,Python,Csv,我编写了一个脚本,从两个不同的API收集数据,但我很难将其全部显示在一行上,而是显示如下: Device Status Model StatusSub d8d Online 122 Disconnected 当我想要它看起来像这样的时候 Device Status Model StatusSub d8d Online 1202 Disconnected 这是我的代码,API受密码保护,因此您无法直接运行: w
Device Status Model StatusSub
d8d Online
122 Disconnected
当我想要它看起来像这样的时候
Device Status Model StatusSub
d8d Online 1202 Disconnected
这是我的代码,API受密码保护,因此您无法直接运行:
while True:#always run
if datetime.datetime.now().minute % 15 == 0 or True:#once every 15 minutes
name = [('Device'), ('Status'), ('Model'), ('StatusSub')]
space = [(''),('')]
print (datetime.datetime.now())
today = datetime.date.today().strftime('E.Subdevice.Logs.%m-%d-%Y')#file name
if os.path.exists(today + '.csv'):#Create new file if its a new day
Append_write = 'ab'
else:
Append_write = 'wb'
with open(today + '.csv',Append_write) as myFile:#open todays csv file, set to write.
writer = csv.writer(myFile)
writer.writerow(name)
writer.writerow(space)
#Loop to collect device name and status 500 at a time and print all 2080 in the file specified above.
for x in range(5):
string1 = "https://api.raincloud.com/rest/device?networkName=Company&take=500&skip="+str(x*500)
response = requests.get(string1,headers=headers).json()
for y in range (len(response)):
myData = [(response[y]['device']),(response[y]['status'])]
string2= 'https://api.raincloud.com/rest/device/'+str(myData[0])+'/subdevice'
response2 = requests.get(string2,headers=headers).json()
for z in range (len(response2)):
myData2 = [(response2[z]['model']),(response2[z]['status']),datetime.datetime.now()]
writer.writerow(myData)
writer.writerow(myData2)
感谢您的帮助 我认为解决方法很简单,只要改变就行了
writer.writerow(myData)
writer.writerow(myData2)
到
每次调用writerow
函数时,它都会写入新行。但是,如果要将所有信息写入一行,则需要在单个writerow
调用中执行。因此,请将两个列表合并为一个列表,然后在单个列表上调用writerow
不过,这段代码有点令人担忧
for z in range (len(response2)):
myData2 = [(response2[z]['model']),(response2[z]['status']),datetime.datetime.now()]
这是在作为第二个响应的json主体的数组上循环,但每次都会覆盖myData2
。因此,myData2
只会等于您的响应的最后一个模型和状态
您的CSV中也没有时间戳列,但您正在将时间添加到
myData2
并将其写入CSV。尝试writer.writerow(myData+myData2)
但myData2
在上面的循环中分配。这显然是一个代码错误,但请注意,您可以一直使用append模式:如果文件不存在,它将创建它。
for z in range (len(response2)):
myData2 = [(response2[z]['model']),(response2[z]['status']),datetime.datetime.now()]