gpt4 book ai didi

python - 处理 diff 文件中的修改

转载 作者:太空宇宙 更新时间:2023-11-03 18:50:07 25 4
gpt4 key购买 nike

我有一个 diff 文件,我想处理添加/删除/修改以更新 SQL 数据库。

+NameA|InfoA1|InfoA2
-NameB|InfoB1|InfoB2
+NameB|InfoB3|InfoB2
-NameC|InfoC1|InfoC2
-NameD|InfoD1|InfoD2
-NameE|InfoE1|InfoE2
+NameD|InfoD1|InfoD3
+NameE|InfoE3|InfoE2

使用 Python 脚本,我首先使用正则表达式检测以下两行,以处理 B 等修改。

re.compile(r"^-(.+?)\|(.*?)\|(.+?)\n\+(.+?)\|(.*?)\|(.+?)(?:\n|\Z)", re.MULTILINE)

我删除所有匹配的行,然后重新扫描我的文件,然后像添加/删除一样处理所有这些行。我的问题是像 D 和 E 这样的行。目前,我将它们视为两次删除,然后两次添加,并且我在 SQL 数据库中得到了 CASCADE DELETE 的后果,因为我应该将它们视为修改。

我该如何处理此类修改 D 和 E?

diff 文件之前是由 bash 脚本生成的,如果需要,我可以以不同的方式处理它。

最佳答案

试试这个:

>>> a = '''
+NameA|InfoA1|InfoA2
-NameB|InfoB1|InfoB2
+NameB|InfoB3|InfoB2
-NameC|InfoC1|InfoC2
-NameD|InfoD1|InfoD2
-NameE|InfoE1|InfoE2
+NameD|InfoD1|InfoD3
+NameE|InfoE3|InfoE2
'''
>>> diff = {}
>>> for row in a.splitlines():
if not row:
continue
s = row.split('|')
name = s[0][1:]
data = s[1:]
if row.startswith('+'):
change = diff.get(name, {'rows': []})
change['rows'].append(row)
change['status'] = 'modified' if change.has_key('status') else 'added'
else:
change = diff.get(name, {'rows': []})
change['rows'].append(row)
change['status'] = 'modified' if change.has_key('status') else 'removed'
diff[name] = change

>>> def print_by_status(status=None):
for item, value in diff.items():
if status is not None and status == value['status'] or status is None:
print '\nStatus: %s\n%s' % (value['status'], '\n'.join(value['rows']))
>>> print_by_status(status='added')

Status: added
+NameA|InfoA1|InfoA2
>>> print_by_status(status='modified')

Status: modified
-NameD|InfoD1|InfoD2
+NameD|InfoD1|InfoD3

Status: modified
-NameE|InfoE1|InfoE2
+NameE|InfoE3|InfoE2

Status: modified,
-NameB|InfoB1|InfoB2
+NameB|InfoB3|InfoB2

在这种情况下,您将拥有包含所有收集的数据以及差异状态和行的字典。您可以对当前的字典执行任何您想要的操作。

关于python - 处理 diff 文件中的修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18530331/

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