我有一堆csv文件,其中每列包含一个值,代表Canadarm2的7个分段的角度。最大的文件包含5小时任务的每秒30兆的值!在
我在下面的C4D脚本管理器中编写了这个python脚本,它从csv读取数据,并每秒创建关键帧,其中分段根据角度数据旋转。在
这个脚本在大小不超过1兆字节的小文件上运行得很好,但是当我尝试处理较大的文件时,我会收到可怕的“Cinema4D已停止响应”警报,或者它只是静静地坐在那里,显然什么也没有发生。在
有人有过类似的经历吗?记忆比我的12场演唱会有用吗?如果我能在C4D里一次处理30分钟的数据,我就赢了。在
memLog=''
record = 0
frame=0
path='/Users/...'
filename = path + '30minutes_3meg.csv'
fileobj = open(filename, 'r')
rowcount=0
for row in fileobj:
rowcount=rowcount+1
if rowcount>1:
ar = row.split(',')
colcount=0
for angle in ar:
if colcount == 0:
log=angle
if log==memLog:
record=0
else:
record=1
print log
frame=frame+1
memLog=log
if colcount == 2:
if record==1:
rotate(frame,'SR','r',angle)
elif colcount == 4:
if record==1:
rotate(frame,'SY','r',angle)
elif colcount == 6:
if record==1:
rotate(frame,'SP','r',angle)
elif colcount == 8:
if record==1:
rotate(frame,'EP','h',angle)
elif colcount == 10:
if record==1:
rotate(frame,'WP','h',angle)
elif colcount == 12:
if record==1:
rotate(frame,'WY','h',angle)
elif colcount == 14:
if record==1:
rotate(frame,'WR','h',angle)
colcount=colcount+1
首先,使用文件打开器进行解析的最简单方法是with:
接下来,Python有一个csv (called csv)的本机库:
因此,要把它放在一起(改编自上面的链接和mgilson):
^{pr2}$旁注:如果你发现你经常这样做,我可以建议你pandas?它将简化过程,并且可以处理大量数据。在
Python有一个^{} module ,这可能会使事情更简单。在
如果您遇到内存问题,我建议您进行强制垃圾回收。您执行
import gc
,然后在循环中,gc.collect()
。它可能不是每个循环都需要的,如果执行得太频繁,甚至会减慢速度。您可以保留一个计数器变量(rowcount
可以这样做)并减少执行频率(比如每10000个循环一次)。实验)。考虑添加一个print语句来指示正在发生的集合和行号。这样您就可以判断脚本是否仍在运行或是否已锁定。在如果可以安装外部Python模块,也可以尝试使用Pandas to load the csv file。对于非常大的文件,它的性能可能更好,但是如果内存仍然不足,则可能需要指定chunksize。在
相关问题 更多 >
编程相关推荐