gpt4 book ai didi

python - 如何在 Cinema4D 中使用 Python 读取大量 csv 文件?

转载 作者:行者123 更新时间:2023-12-01 09:07:41 25 4
gpt4 key购买 nike

我有一堆 csv 文件,其中每列都有一个值,表示 Canadarm2 的 7 个段中每个段的角度。最大的文件包含 5 小时任务中每秒的值,为 30 兆!

我在 C4D 的脚本管理器中编写了这个 python 脚本,它从 csv 读取数据并每秒创建关键帧,其中片段根据角度数据旋转。

该脚本在大小不超过 1 meg 的小文件上运行良好,但我收到可怕的“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

最佳答案

Python有一个csv module这可能会让事情变得更容易。

如果您遇到内存问题,我建议您进行强制垃圾回收。您执行import gc,然后在循环中执行gc.collect()。它可能不是每个循环都需要,如果执行得太频繁甚至会减慢速度。您可以保留一个计数器变量(rowcount 即可)并减少执行频率(例如,每 10,000 次循环。实验)。考虑添加一条打印语句,指示发生的收集和行号。这样您就可以判断脚本是否仍在运行或是否已锁定。

if rowcount % 10000 == 0:
print 'collecting', rowcount
gc.collect()

如果您可以安装外部Python模块,您也可以尝试使用Pandas to load the csv file 。它对于非常大的文件可能表现更好,但如果内存仍然不足,您可能必须指定 block 大小。

关于python - 如何在 Cinema4D 中使用 Python 读取大量 csv 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51914080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com