如何分离输出数据 [英] How to Separate Output Data
问题描述
这是我的代码:
#-------------------------------------------------------------------------------
# Name: Mocha Rotoscoping Via Blender
# Purpose: Make rotoscoping more efficient
#
# Author: Jeff Owens
#
# Created: 11/07/2011
# Copyright: (c) jeff.owens 2011
# Licence: Grasshorse
#-------------------------------------------------------------------------------
#!/usr/bin/env python
import sys
import os
import parser
sys.path.append('Z:\_protomotion\Prog\HelperScripts')
import GetDir
sys.path.append('Z:/Blender_Roto')
filename = 'diving_board.shape4ae'
infile = 'Z:/Blender_Roto/'
#import bpy
#from mathutils import Vector
#below are taken from mocha export
x_width =2048
y_height = 778
z_depth = 0
frame = 20
import re
data_directory = 'Z:/Blender_Roto/' # windows
data_file = 'diving_board.shape4ae'
fullpath = data_directory + data_file
print("====init=====")
file = open(fullpath)
for line in file:
current_line = line
# massive room for optimized code here.
# this assumes the last element of the line containing the words
# "Units Per Second" is the number we are looking for.
# this is a non float number, generally.
if current_line.find("Units Per Second") != -1:
fps = line_split = float(current_line.split()[-1])
print("Frames Per Second:", fps)
# source dimensions
if current_line.find("Source Width") != -1:
source_width = line_split = int(current_line.split()[-1])
print("Source Width:", source_width)
if current_line.find("Source Height") != -1:
source_height = line_split = int(current_line.split()[-1])
print("Source Height:", source_height)
# aspect ratios
if current_line.find("Source Pixel Aspect Ratio") != -1:
source_px_aspect = line_split = int(current_line.split()[-1])
print("Source Pixel Aspect Ratio:", source_px_aspect)
if current_line.find("Comp Pixel Aspect Ratio") != -1:
comp_aspect = line_split = int(current_line.split()[-1])
print("Comp Pixel Aspect Ratio:", comp_aspect)
# assumption, ae file can contain multiple mocha shapes.
# without knowing the exact format i will limit the script
# to deal with one mocha shape being animated N frames.
# this gathers the shape details, and frame number but does not
# include error checking yet.
if current_line.find("XSpline") != -1:
# record the frame number.
frame = re.search("\s*(\d*)\s*XSpline", current_line)
if frame.group(1) != None:
frame = frame.group(1)
print("frame:", frame)
# pick part the part of the line that deals with geometry
match = re.search("XSpline\((.+)\)\n", current_line)
line_to_strip = match.group(1)
points = re.findall('(\(.*?\))', line_to_strip)
print(len(points))
for point in points:
print(point)
file.close()
这是输出:
====init=====
Frames Per Second: 24.0
Source Width: 2048
Source Height: 778
Source Pixel Aspect Ratio: 1
Comp Pixel Aspect Ratio: 1
frame: 20
5
(0.793803,0.136326,0,0.5,0)
(0.772345,0.642332,0,0.5,0)
(0.6436,0.597615,0,0.5,0)
(0.70082,0.143387,0,0.5,0.25)
(0.70082,0.112791,0,0.5,0)
我想弄清楚如何指出给定的各个要点.例如,我如何让代码只吐出0.793803,或者只吐出0.136326,等等
I want to figure out how to call out individual points given. For example, how would I have the code just spit out 0.793803, or just spit out 0.136326, etc etc
附录
所以我最后要做的就是添加这个
So what I ended up doing was adding this
(point1, point2, point3, point4, point5) = points
print (point1)
#print (point2)
#print (point3)
#print (point4)
#print (point5)
产生了:
(0.793803,0.136326,0,0.5,0)
但是当我尝试再次解析并且写了
But when I tried to parse again and I wrote
(x,y,z,w,s) = p
它提出了错误p,未定义
it came up with the error p is not defined
所以我尝试了 (x,y,z,w,s)= point1
so then I tried (x,y,z,w,s) = point1
产生的错误值太多,无法解包.
which yielded the error too many values to unpack.
我尝试过的另一件事是
for point1 in points
p1x = (x,)
print (p1x)
只是产生了第一个(而不是整个X值...
which just yielded the first ( rather than the whole X value...
有解决方案吗?
ADDENDUM PT 2
这是怎么回事:
====init=====
Frames Per Second: 24.0
Source Width: 2048
Source Height: 778
Source Pixel Aspect Ratio: 1
Comp Pixel Aspect Ratio: 1
5
frame: 20
(0.793803,0.136326,0,0.5,0)
x: (, y: y0
x: (, y: y0
x: (, y: y0
x: (, y: y0
x: (, y: y0
当我输入此内容
(point1, point2, point3, point4, point5) = points
print (point1)
#print (point2)
#print (point3)
#print (point4)
#print (point5)
for point in points:
x, y, *data = point
print(str.format("x: {0}, y: y{1}", x, y))
file.close()
我不知道为什么要拉(,(0.793803,0.136326,0,0.5,0)
I don't know why it is pulling (, from (0.793803,0.136326,0,0.5,0)
我可以告诉你,程序认为如果我输入x,y,z,w,s
I can tell you that the program thinks that if I put x, y, z, w, s
我想要x:'('y:'0'z:'.'w:'7's:'9' 我不知道 我想: x:0.793803 y:0.136326 z:0 w:0.5 s:0
I want x: '(' y: '0' z: '.' w: '7' s: '9' which I don't, I want: x: 0.793803 y: 0.136326 z: 0 w: 0.5 s: 0
抱歉,所有问题,我真的感谢您的帮助
Sorry for all the questions, I really appreciate your help
推荐答案
这些点是元组,所以很简单.
The points are tuples, so it's rather simple.
您可以先打开它们的包装(其中p是点):
You can unpack them first (where p is a point):
>>> x, y, *data = p
>>> x
0.793803
>>> y
0.136326
>>> data
[0, 0.5, 0]
或者您可以将它们编入索引:
Or you can index into them:
>>> p[0]
0.793803
或者您可以疯狂使用字符串格式:
Or you can go crazy with string formatting:
>>> str.format("x{0[0]} y{0[1]}", p)
'x0.793803 y0.136326'
好吧,也许不是最后一个.为了便于阅读,我会先将它们拆包.
Ok, maybe not that last one. I would unpack them first for readability.
我在上下文中的示例:
for point in points:
x, y, *data = point
print(str.format("x: {0}, y: y{1}", x, y))
points
是元组的可迭代",每个元组代表样条线上的一个点,并捕获到变量point
中.
points
is an "iterable" of tuples, each tuple representing a point on the spline, captured into the variable point
.
这篇关于如何分离输出数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!