这个文件格式看起来像以前任何人都看过的(我修剪了很多,所以你只能看到格式化):
<REAPER_PROJECT 0.1 "5.29/x64" 1493370961
RIPPLE 0
GROUPOVERRIDE 0 0 0
AUTOXFADE 1
ENVATTACH 1
<TRACK {1157FED1-D15B-4B2B-A89E-BF3696E69030}
NAME "Station VT"
PEAKCOL 29129222
<ITEM
PLAYRATE 1 1 0 -1 0 0.0025
CHANMODE 0
GUID {2493C675-0CB3-433B-B8CD-D661290D7980}
<SOURCE WAVE
FILE "Audio\04-KTKE VT-glued-131121_1022 render 001.wav"
>
>
<ITEM
PLAYRATE 1 1 0 -1 0 0.0425
CHANMODE 0
GUID {2493C123-0C32-466B-B8CD-D66129123123}
<SOURCE WAVE
FILE "Audio\131343121_1022 render 001.wav"
>
>
>
>
我已经联系了生成此文件的程序供应商,看看他们是否可以让我知道他们是如何生成该文件的,但我不确定我是否会得到回复从他们。我猜它是一种结构结构或者类似的东西?有点猜测,因为我不熟悉许多其他语言。
最终,我想把它读入Python,如果可能的话,对数据进行一些更改,然后将其吐回到文件中。否则,我想我会逐行解析它并进行我需要的更改 - 并非不可能,但如果已经有读者存在则会更容易。
修改
我应该提到我需要以与我读取的格式相同的格式输出数据,因此拥有读写器将是理想的。
答案 0 :(得分:1)
您可以将其转换为XML,例如:
def to_XML():
with open('test/REAPER_in.txt') as f_in,\
open('test/REAPER.xml', 'w') as f_out:
tags = []
while True:
line = f_in.readline()[:-1].strip(' ')
if not line: break
if line.startswith('<'):
eot = line.find(' ')
if eot > -1:
tag = line[1:eot]
data = line[eot+1:].replace('"', '')
f_out.write( '<%s data="%s">\n' % (tag, data))
else:
tag = line[1:]
f_out.write('<%s>\n' % (tag) )
tags.append(tag)
elif line.startswith('>'):
tag = tags.pop()
f_out.write('</%s>\n' % tag)
else:
eot = line.find(' ')
tag = line[:eot]
data = line[eot+1:].replace('"', '')
f_out.write( '<%s>%s</%s>\n' % (tag, data, tag) )
输出
<REAPER_PROJECT data="0.1 5.29/x64 1493370961">
<RIPPLE>0</RIPPLE>
<GROUPOVERRIDE>0 0 0</GROUPOVERRIDE>
<AUTOXFADE>1</AUTOXFADE>
<ENVATTACH>1</ENVATTACH>
<TRACK data="{1157FED1-D15B-4B2B-A89E-BF3696E69030}">
<NAME>Station VT</NAME>
<PEAKCOL>29129222</PEAKCOL>
<ITEM>
<PLAYRATE>1 1 0 -1 0 0.0025</PLAYRATE>
<CHANMODE>0</CHANMODE>
<GUID>{2493C675-0CB3-433B-B8CD-D661290D7980}</GUID>
<SOURCE data="WAVE">
<FILE>Audio\04-KTKE VT-glued-131121_1022 render 001.wav</FILE>
</SOURCE>
</ITEM>
</TRACK>
</REAPER_PROJECT>