Контролировать мой вывод - PullRequest
       9

Контролировать мой вывод

0 голосов
/ 11 августа 2011

Вот код:

#!/usr/bin/env python
import json
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.
    print(len(points))
    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)

(p1, p2, p3, p4, p5) = points
print (p1)
#print (p2)
#print (p3)
#print (p4)
#print (p5)

file.close()

Вот мой вывод:

====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)

из этого вывода я хочу иметь возможность назначить (0,793803) переменной 'point1x' (0.136326) переменной point1y (0) переменной point1z (0.5) переменной point1w и (0) переменной point1s.

Так что вместо того, чтобы просто выводить (0.793803,0.136326,0,0.5,0), я хочу, чтобы он давал мне значения по отдельности

так:

point1x: 0.793803
point1y: 0.136326
point1z: 0
point1w: 0.5
point1s: 0

Кто-нибудь знает, как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 11 августа 2011

Это похоже на кортеж, и в этом случае выражение python для того, что вы хотите:

point1x, point1y, point1z, point1w = (0.793803,0.136326,0,0.5,0)
1 голос
/ 12 августа 2011

Если у вас есть points, если вы знаете , это всегда будет разделенный запятыми список десятичных чисел, просто сделайте что-то вроде этого:

points = points.split(",")
# points = ["0.793803","0.136326","0","0.5","0"]
# Now you can use John Gaines suggestion
# to unpack your variables
point1x, point1y, point1z, point1w = points

Если вы неВы не знаете, сколько будет точек для распаковки для любой данной записи, но вы знаете максимум, просто отметьте points length после разделения и добавьте в список соответствующее количество None записей:

# Somewhere earlier
max_entries = 5
# ... snip ...
# points = ["0.793803","0.136326","0"]
cur_len = len(points)
if cur_len > max_entries:
    raise ValueError("%d points discovered in %s.  Max entries is %d" % (cur_len, points, max_entries)
 if cur_len != max_entries:
     points += [None] * (max_entries - cur_len)
 # Continue from here
...