[英]Read data from file into different arrays in python
我正在为blender创建一个简单的脚本,我需要一些帮助来从我之前通过python创建的文件中获取一些数据。
该文件得到如下结构:
name first morph
values -1.0000 1.0000
data 35 0.026703 0.115768 -0.068769
data 36 -0.049349 0.015188 -0.029470
data 37 -0.042880 -0.045805 -0.039931
data 38 0.000000 0.115775 -0.068780
name second morph
values -0.6000 1.2000
data 03 0.037259 -0.046251 -0.020062
data 04 -0.010330 -0.046106 -0.019890
…
等等2k行; p
我需要的是创建一个循环,逐行读取这些数据并将值放入三个不同的数组:names [] values []和data []取决于文件行的第一个单词。
Manualy it should be like that:
names.append('first morph')
values.append( (-1.0000,1.0000))
data.append((35, 0.026703, 0.115768, -0.068769))
data.append((36, -0.049349, 0.015188, -0.029470))
data.append((37, -0.042880, -0.045805, -0.039931))
data.append((38, 0.000000, 0.115775, -0.068780))
names.append('second morph')
values.append( (-0.6000,1.2000))
…
我不知道为什么我尝试创建那种'for line in file:'循环创建比完整数据更多的错误,我不知道为什么超出范围,或者没有获得正确的数据
因为我已经将所需的参数导出到文件中,所以请帮助如何自动化该过程,而不是手动编写每一行。
names = []
values = []
data = []
with open('yourfile') as lines:
for line in lines:
first, rest = line.split(' ', 1)
if first == 'name':
names.append(rest)
elif first == 'values':
floats = map(float, rest.split())
values.append(tuple(floats))
elif first == 'data':
int_str, floats_str = rest.split(' ', 1)
floats = map(float, floats_str.split())
data.append( (int(int_str),) + tuple(floats) )
你为什么这样需要它? 您如何知道数据和值列表中下一个名称的起始位置?
这是一个简单的python“for line in”解决方案......你可以调用processed.py
...
fp = open("data1.txt", "r")
data = fp.readlines()
fp1 = open("processed.py", "w")
fp1.write("names = []\nvalues=[]\ndata=[]\n")
for line in data:
s = ""
if "name" in line:
s = "names.append('" + line[5:].strip() + "')"
elif "values" in line:
s = "values.append((" + ", ".join(line[7:].strip().split(" ")) + "))"
elif "data" in line:
s = "data.append((" + ", ".join(line[5:].strip().split(" ")) + "))"
fp1.write(s + "\n");
fp1.close()
fp.close()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.