Python:写入csv一周关闭并打开新的csv文件

时间:2018-03-28 16:49:51

标签: python loops csv

寻找正确方向或帮助的一点。我知道这是我做错了,但我是新人,仍在努力学习,所以总是需要和需要指导。

我查看了问题部分,找不到有用的东西。我尝试了一堆解决方案,但他们没有工作,除非我做错了。我想要做的是每周一个小步骤写一个csv一个星期然后关闭文件并打开一个新的。这是基于真正的日历周。我也遇到了循环问题。我可以按照我想要的方式打开并写入文件,但不能在我想要的时间内写入文件。

以下是我正在使用的代码的一部分,之前有一些代码,但它只是打开iframes获取我需要的数据:

file_name = 'Tempdata.csv'

headers = (['Space', 'South Wall Int.','','','Space', 'South Wall Ext.')
headers2 =(['Timestamp','Time','Date','Temperature','Timestamp',
'Time','Date','Temperature'])

if os.path.isfile(file_name):
    with open('Tempdata.csv', 'a', newline='') as f:
        w = csv.writer(f)
        line=()
        for frag in data:
            line+=frag
        w.writerow(line)
else:
    with open(file_name, 'w', newline='') as f:
        w = csv.writer(f)
        w.writerow(headers)
        w.writerow(headers2)
        line=()
        for frag in data:
        line+=frag
        w.writerow(line)

nos=25  # Number of samples
req=5  # Sampling frequency
print("\nTemperature & timestamp, sampled every", freq, "seconds:")

while True:
    for i in range(nos):
        ts=driver.find_element_by_name("_lastUpdated").get_attribute
        ("value")
        #print("\nTemperature: ", element.text, "read at:", ts)
        time.sleep(freq)

driver.switch_to_default_content()

print ("Done.")

1 个答案:

答案 0 :(得分:2)

由于你的代码并不完全是最小的,所以我没有读过很多内容,而是通过你的口头描述。

我使用datetime来获取当前时间(包括日历周)。当有新的一周时,我关闭旧的一周并打开一个新文件。 最后我等待60或59秒,具体取决于当前分钟的秒数(实际操作需要一些时间,否则会累积)。

因此,如果您通过操作替换write - 命令,这应该可以。

import datetime
import time

old_week = -1 
writer = None

while True:
  dt = datetime.datetime.now()
  calendar_week = dt.isocalendar()[1]
  minute = dt.minute
  if calendar_week > old_week:
    old_week = calendar_week
    if writer is not None:
      writer.close()
    #replace accordingly
    writer = open('log_%s.csv' % calendar_week, 'w')
    writer.write('week; minute; actual\n')
  #replace accordingly
  writer.write('%s;%s;%s\n' % (calendar_week, minute, dt.isoformat()))
  if dt.second < 30:
    time.sleep(60)
  else:
    time.sleep(59)
writer.close()