Reading TDMS files in python_ how to use tdmsinfo command?

∥☆過路亽.° 提交于 2019-12-10 10:43:07

问题


I would like to know what is the content of a tdms file, which is produced by Labview.

Following this site, I write in Python:

import numpy as np
from nptdms import TdmsFile
from nptdms import tdms

#read a tdms file
filenameS = "RESULTS.tdms"
tdms_file = TdmsFile(filenameS)

tdmsinfo [--properties] tdms_file

I receive the following error:

tdmsinfo [--properties] tdms_file
                                    ^
SyntaxError: invalid syntax

I do not how to fix it.

Thank you for your help :)


回答1:


What you are looking for is:

First create a TMDS objet from file:

tdms_file = TdmsFile("C:\\Users\\XXXX\\Desktop\\xx Python\\XXXX.tdms")

then get the group names with:

tdms_groups = tdms_file.groups()

after you can figure out which group names you have into the file, just write

tdms_groups

It will print the following:

['Variables_1', 'Variables_2', 'Variables_3', 'Variables_4', etc..]

With group names now u will be able to get channels with the following:

tdms_Variables_1 = tdms_file.group_channels("Variables_1")

Next print your channels contain into that group:

tdms_Variables_1

It will show:

[ TdmsObject with path /'Variables_1'/'Channel_1', TdmsObject with path /'Variables_1'/'Channel_2', etc..]

At the end get the vectors and its data:

MessageData_channel_1 = tdms_file.object('Variables_1', 'Channel_1')
MessageData_data_1 = MessageData_channel_1.data

Check your data

MessageData_data_1

do stuff with your data! cheers!




回答2:


To loop over all properties from the root object try this:

 #read a tdms file
 filenameS = "RESULTS.tdms"
 tdms_file = TdmsFile(filenameS)
 root_object = tdms_file.object()

 # Iterate over all items in the properties dictionary and print them
 for name, value in root_object.properties.items():
      print("{0}: {1}".format(name, value))

That should give you all properties names.




回答3:


Your problem seems to be that tdmsinfo will not work inside a Python script as it is not a python command: it's "a command line program".

The solution is to either use 'tdmsinfo' from a windows shell, or make a wrapper in python so that it runs the command in a subprocess for you. For instance in Python3 with the subprocess package

import subprocess
tdmsfile='my_file.tdms'
# startup info to hide the windows shell
si = subprocess.STARTUPINFO()
si.dwFlags |= subprocess.STARTF_USESHOWWINDOW
#si.wShowWindow = subprocess.SW_HIDE # default
# run tdmsinfo in a subprocess and capture the output in a
a = subprocess.run(['tdmsinfo',tdmsfile],
                   stdout=subprocess.PIPE,
                   startupinfo=si).stdout
a = a.decode('utf-8')
print(a)

the code above should give you only the channels and groups, but you can also run with the -p flag to include all the TDMS object properties

a = subprocess.run(['tdmsinfo','-p',tdmsfile],
                   stdout=subprocess.PIPE,
                   startupinfo=si).stdout


来源:https://stackoverflow.com/questions/44796977/reading-tdms-files-in-python-how-to-use-tdmsinfo-command

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!