在 pdm 文件中搜索关键字并提取该关键字
Searching a key word in a pdm file and pulling that key word
所以我有代码可以搜索目录以查找文件名末尾有 cdm 的文件。我将文件的路径保存到数据框中。如何在我的搜索中添加一种在这些文件中查找单词“ID”然后提取该单词旁边的 16 位随机数的方法?只需在文件中添加此 ID。我还想将这些 ID 存储在数据框中。我想要自动化的原因是因为有 457 个文件。
这是格式示例:
<?PowerDesigner AppLocale="UTF16" ID="{F4847BC0-D005-4204-964A-9C0DFE28416E}" Label="" LastModificationDate="1609351245" Name="WORKPLACE INVESTING BACKUP" Objects="857" Symbols="302" Type="{1E597170-9350-11D1-AB3C-0020AF71E433}" signature="CDM_DATA_MODEL_XML" version="16.7.1.6488"?>
我要的值是ID后面的值
import os
import pandas as pd
#This variable was created to save time by staring it at the W folder and go from there.
current_dur = r'Workplace'
#empty data frame to put the file paths in.
cdm_files = []
for root, dirs, files in os.walk(current_dur):
for file in files:
if file.endswith('.cdm'):
pdm_files.append(os.path.join(root, file))
cdm_filesdataframe = pd.DataFrame(cdm_files)
cdm_filesdataframe.rename(columns = { 0 :'Directory Path'}, inplace = True)
您可以使用正则表达式在每个.cdm
文件中查找ID
属性(或者lxml
包应该更好)。我还将 os.walk
替换为 pathlib.glob
。这里的代码:
import re
import pathlib
root_dir = pathlib.Path(r'\the\path')
data = []
for cdmfile in root_dir.glob('**/*.cdm'):
with open('powerdesigner.cdm') as cdm:
# skip first line: <?xml ...?>
next(cdm)
# Read next line: <?PowerDesigner ...?>
# if sre := re.search(r'ID="\{(?P<ID>[^\{]+)\}"', cdm.readline()):
sre = re.search(r'ID="\{(?P<ID>[^\{]+)\}"', cdm.readline())
if sre:
data.append((sre.group('ID'), cdmfile))
df = pd.DataFrame(data, columns=['ID', 'FilePath'])
所以我有代码可以搜索目录以查找文件名末尾有 cdm 的文件。我将文件的路径保存到数据框中。如何在我的搜索中添加一种在这些文件中查找单词“ID”然后提取该单词旁边的 16 位随机数的方法?只需在文件中添加此 ID。我还想将这些 ID 存储在数据框中。我想要自动化的原因是因为有 457 个文件。
这是格式示例:
<?PowerDesigner AppLocale="UTF16" ID="{F4847BC0-D005-4204-964A-9C0DFE28416E}" Label="" LastModificationDate="1609351245" Name="WORKPLACE INVESTING BACKUP" Objects="857" Symbols="302" Type="{1E597170-9350-11D1-AB3C-0020AF71E433}" signature="CDM_DATA_MODEL_XML" version="16.7.1.6488"?>
我要的值是ID后面的值
import os
import pandas as pd
#This variable was created to save time by staring it at the W folder and go from there.
current_dur = r'Workplace'
#empty data frame to put the file paths in.
cdm_files = []
for root, dirs, files in os.walk(current_dur):
for file in files:
if file.endswith('.cdm'):
pdm_files.append(os.path.join(root, file))
cdm_filesdataframe = pd.DataFrame(cdm_files)
cdm_filesdataframe.rename(columns = { 0 :'Directory Path'}, inplace = True)
您可以使用正则表达式在每个.cdm
文件中查找ID
属性(或者lxml
包应该更好)。我还将 os.walk
替换为 pathlib.glob
。这里的代码:
import re
import pathlib
root_dir = pathlib.Path(r'\the\path')
data = []
for cdmfile in root_dir.glob('**/*.cdm'):
with open('powerdesigner.cdm') as cdm:
# skip first line: <?xml ...?>
next(cdm)
# Read next line: <?PowerDesigner ...?>
# if sre := re.search(r'ID="\{(?P<ID>[^\{]+)\}"', cdm.readline()):
sre = re.search(r'ID="\{(?P<ID>[^\{]+)\}"', cdm.readline())
if sre:
data.append((sre.group('ID'), cdmfile))
df = pd.DataFrame(data, columns=['ID', 'FilePath'])