gpt4 book ai didi

python-3.x - 在 Python 中修改 gzip xml 文件(Adobe Premiere Pro 项目文件)的更快方法?

转载 作者:行者123 更新时间:2023-12-04 15:36:14 25 4
gpt4 key购买 nike

这是我在闲暇时间潜伏和使用 Python 多年后在 stackoverflow 社区发表的第一篇文章。我编写了一个脚本来修改 Adob​​e Premiere Pro 文件,以便将它们降级为“版本 1”。这允许用户在旧版本的程序中打开新的项目文件。

现在,要清楚,这已经完成了。 stackoverflow 和 Adob​​e 论坛上有几个人发布了这个问题的问题和解决方案。我的问题涉及使用 python gzip 模块和 BeautifulSoup 与 lxml 解析器解压缩和修改 xml 文件的速度/效率。

代码如下:

# Assume I've done all the imports like gzip, bs4, pathlib, sys, etc.
#
def downgrade(prproj_in): # Main functionality of the program. Downgrades target prproj files.
"""
Shortened the docstring to save reading...
"""
new_version = '1'
root, ext = os.path.splitext(prproj_in) # Checking if file extension is correct.
new_name = (root + '_DOWNGRADED' + '(v.' + str(new_version) + ').prproj')

try:
if ext != '.prproj':
print('Invalid filetype. Must have valid .prproj extension.')
# If not a valid Adobe Premiere file, exit.
elif os.path.exists(new_name):
print('Output file already exists at this location. Please move or rename.')
else: # Otherwise... continue on to unzip and parse the xml file with BeautifulSoup.
with tqdm(total=100) as pbar: # Initialize progress bar.
with gzip.open(prproj_in, 'rt') as f: # Decompress project file and open...
file_content = f.read() # Put file contents into variable as string text
soup = BeautifulSoup(file_content, 'xml') # create soup object
print('Current project version: ' +
soup.Project.find_next()['Version']) # Printing current project version.
soup.Project.find_next()['Version'] = new_version # Change project version number to 1
print('Downgraded project version to: ' +
str(soup.Project.find_next()['Version'])) # Print new current version.
pbar.update(80)
with gzip.open(new_name, 'wt') as f_out:
f_out.write(str(soup)) # Turn soup object to string for final writing to gzip file.
pbar.update(100)
print('Downgrade Complete. New file: ' + new_name) # Change file extension.
except:
exception = sys.exc_info()
handle_exceptions(exception[0])

这里是解压后的.prproj文件开头部分,需要修改的相关属性:

<?xml version="1.0" encoding="UTF-8" ?>
<PremiereData Version="3">
<Project ObjectRef="1"/>
<Project ObjectID="1" ClassID="62ad66dd-0dcd-42da-a660-6d8fbde94876" Version="30">

此代码在只有几 MB 的项目文件上运行良好(在解压缩之前),但一旦文件大小达到 60、70 或 80 MB,则运行最多需要 10 分钟。我目前正在制作一部独立纪录片,其中我的项目文件在压缩时超过 100 MB,在解压缩时高达 1.6 GB。我在配备 128 GB RAM 和 3 GHz Xeon 处理器的 iMac Pro 上运行此脚本。

我测试了 GitHub 上流传的其他几个脚本,它们在处理大型项目文件时似乎表现出类似的行为。

很想听听有关如何解决此问题的一些想法。谢谢!

最佳答案

@Alfe,感谢您的想法!通过使用正则表达式重写 xml 解析步骤,我能够自己解决这个问题。在此之前我没有深入研究过正则表达式,但我发现它的运行速度比 Beautiful Soup 解析器快一个数量级。

我修改后的代码在github上: https://github.com/snorkem/prproj_downgrade/blob/master/prproj_downgrade.py

关于python-3.x - 在 Python 中修改 gzip xml 文件(Adobe Premiere Pro 项目文件)的更快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59671226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com