Python按增量修改csv列

Python按增量修改csv列,python,csv,time,Python,Csv,Time,首先,我为这个糟糕的标题道歉;我不知道如何总结我的问题。好的,这是我的.csv文件的前几行。第一列是时间戳。程序每秒24次从样本中获取数据,因此有24行以15:40:15开始,24行以15:40:16开始,依此类推。我希望时间戳增加1/24秒或.042秒的增量,而不是使用相同时间戳的24行。所以15:40:15.042,15:40:15.084等等 另一个问题是第一秒没有24行,因为我们从第二秒开始。例如,只有13 15:40:14行。对于那些人来说,最好从15:40:15.000倒计时,每行减

首先,我为这个糟糕的标题道歉;我不知道如何总结我的问题。好的,这是我的.csv文件的前几行。第一列是时间戳。程序每秒24次从样本中获取数据,因此有24行以15:40:15开始,24行以15:40:16开始,依此类推。我希望时间戳增加1/24秒或.042秒的增量,而不是使用相同时间戳的24行。所以15:40:15.042,15:40:15.084等等

另一个问题是第一秒没有24行,因为我们从第二秒开始。例如,只有13 15:40:14行。对于那些人来说,最好从15:40:15.000倒计时,每行减去0.042秒

如何在Python中实现这一点?提前谢谢

CPUtime,Displacement Into Surface,Load On Sample,Time On Sample,Raw Load,Raw Displacement
15:40:14,-990.210561,-0.000025,1.7977E+308,-115.999137,-989.210000
15:40:14,-989.810561,-0.000025,1.7977E+308,-115.999105,-988.810000
15:40:14,-989.410561,-0.000025,1.7977E+308,-115.999073,-988.410000
15:40:14,-989.010561,-0.000025,1.7977E+308,-115.999041,-988.010000
15:40:14,-988.590561,-0.000025,1.7977E+308,-115.999007,-987.590000
15:40:14,-988.170561,-0.000025,1.7977E+308,-115.998974,-987.170000
15:40:14,-987.770561,-0.000025,1.7977E+308,-115.998942,-986.770000
15:40:14,-987.310561,-0.000025,1.7977E+308,-115.998905,-986.310000
15:40:14,-986.870561,-0.000025,1.7977E+308,-115.998870,-985.870000
15:40:14,-986.430561,-0.000025,1.7977E+308,-115.998834,-985.430000
15:40:14,-985.990561,-0.000025,1.7977E+308,-115.998799,-984.990000
15:40:14,-985.570561,-0.000025,1.7977E+308,-115.998766,-984.570000
15:40:14,-985.170561,-0.000025,1.7977E+308,-115.998734,-984.170000
15:40:15,-984.730561,-0.000025,1.7977E+308,-115.998698,-983.730000
15:40:15,-984.310561,-0.000025,1.7977E+308,-115.998665,-983.310000
15:40:15,-983.890561,-0.000025,1.7977E+308,-115.998631,-982.890000
15:40:15,-983.490561,-0.000025,1.7977E+308,-115.998599,-982.490000
15:40:15,-983.090561,-0.000025,1.7977E+308,-115.998567,-982.090000

打开csv文件并根据创建csv读取器

还可以根据创建csv编写器

现在循环浏览文件的每一行。在每一行上,修改时间戳,然后将其写入新的csv文件

如果希望新的csv文件替换旧的csv文件,最后使用shutil替换它


我建议在循环中有一个名为“current\u timestamp”的变量和一个名为“current\u increment”的变量。如果行中的时间戳等于当前时间戳,只需添加增量,否则将两者适当更改。

打开csv文件,并根据

还可以根据创建csv编写器

现在循环浏览文件的每一行。在每一行上,修改时间戳,然后将其写入新的csv文件

如果希望新的csv文件替换旧的csv文件,最后使用shutil替换它

我建议在循环中有一个名为“current\u timestamp”的变量和一个名为“current\u increment”的变量。如果行中的时间戳等于当前的时间戳,只需添加增量,否则将两者适当更改。

我要添加一个,您可以使用它将具有相同时间戳的行分组:

import csv
import shutil
from itertools import groupby

n = 24
time_increment = 1./n
fractions = [("%.3f" % (i*time_increment,)).lstrip('0') for i in xrange(n)]

with open('input.csv', 'rb') as f, open('output.csv', 'wb') as fout:
     writer = csv.writer(fout)
     # assume the file is sorted by timestamp
     for timestamp, group in groupby(csv.reader(f), key=lambda row: row[0]):
         sametime = list(group) # all rows that have the same timestamp
         assert n >= len(sametime)
         for i, row in enumerate(sametime, start=n-len(sametime)):
             row[0] += fractions[i] # append fractions of a second
         writer.writerows(sametime)

shutil.move('output.csv', 'input.csv') # update input file
  • Python 2中的csv必须使用“b”文件模式,否则可能跨越多个物理行的条目将无法工作
  • 如果具有相同时间戳的条目少于
    n
    ,则代码假定它们是从一秒钟结束时开始的连续值
我想补充一点,您可以使用它对具有相同时间戳的行进行分组:

import csv
import shutil
from itertools import groupby

n = 24
time_increment = 1./n
fractions = [("%.3f" % (i*time_increment,)).lstrip('0') for i in xrange(n)]

with open('input.csv', 'rb') as f, open('output.csv', 'wb') as fout:
     writer = csv.writer(fout)
     # assume the file is sorted by timestamp
     for timestamp, group in groupby(csv.reader(f), key=lambda row: row[0]):
         sametime = list(group) # all rows that have the same timestamp
         assert n >= len(sametime)
         for i, row in enumerate(sametime, start=n-len(sametime)):
             row[0] += fractions[i] # append fractions of a second
         writer.writerows(sametime)

shutil.move('output.csv', 'input.csv') # update input file
  • Python 2中的csv必须使用“b”文件模式,否则可能跨越多个物理行的条目将无法工作
  • 如果具有相同时间戳的条目少于
    n
    ,则代码假定它们是从一秒钟结束时开始的连续值

我不知道如何开始:(我是个新手。我本想查看csv模块文档,但我很迷茫。我不知道如何开始:(我是个新手。我本想查看csv模块文档,但我很迷茫。谢谢!我可以从中学到很多东西!不过,有一件事-断言n>=len(sametime)是什么因为?它给了我一条错误消息,所以我删除了它。@IntrnetHteMchne:
assert n>=len(sametime)
确保具有相同时间戳的连续行数少于25行。如果assert语句不起作用,则您的输入无效,您应该对这些行进行调查。这是一个很好的答案,显示了良好的标准做法。groupby+writerows是一个很好的组合@J.F.Sebastian啊,明白了。我实际上算错了,还有有25行具有相同的时间戳!再次感谢!感谢!我可以从中学到很多东西!但是,有一件事-assert n>=len(sametime)的作用是什么?它给了我一条错误消息,所以我将其删除。@IntrnetHteMchne:
assert n>=len(sametime)
确保具有相同时间戳的连续行数少于25行。如果assert语句不起作用,则您的输入无效,您应该对这些行进行调查。这是一个很好的答案,显示了良好的标准做法。groupby+writerows是一个很好的组合@J.F.Sebastian啊,明白了。我实际上算错了,还有有25行具有相同的时间戳!再次感谢!