簡體   English   中英

需要從 Python 中的一行中提取特定模式

[英]Need to extract specific pattern from a line in Python

Member DOB:2012-04-18!:MemberID:00000000!Filename:Source_Folder\Sample_File.pdf!:Language:English!:Member First Name:CONDA!:Member Last Name:LAVE!

上面給出的示例是文件的第一行,可以有 n 行具有不同的屬性,我需要從示例行中的“文件名:Source_Folder\Sample_File.pdf”獲取文件名並檢查該文件是否(Sample_File .pdf)存在於另一個文件夾中,並且該文件中的所有行都必須這樣做。 該順序可能會發生變化。

我是 Python 的初學者,任何幫助將不勝感激,在此先感謝。

您可以像這樣使用正則表達式:

import re

line = 'Member DOB:2012-04-18!:MemberID:00000000!Filename:Source_Folder\Sample_File.pdf!:Language:English!:Member First Name:CONDA!:Member Last Name:LAVE!'

re.search('Filename:(.*?)!', line).group(1).split('\\')[1]

'Sample_File.pdf'

這是單行的解決方案。 您只需要將其添加到多行的循環中。

string = "Member DOB:2012-04-18!:MemberID:00000000!Filename:Source_Folder\Sample_File.pdf!:Language:English!:Member First Name:CONDA!:Member Last Name:LAVE!"

str_arr = string.split(':')

for i in range(0,len(str_arr)):
    if "Filename" in str_arr[i]:
        path = str_arr[i+1]
        break;

if "!" in path:
    path = path[:-1]

print(path)

說明:首先我將一個字符串轉換為一個字符串數組。 單詞由:分隔。 因此,Str_arr的Z78E6221F6393D135681DB398F14CE6DZ是['Member DOB', '2012-04-18,', 'MemberID', '00000000.Filename', 'Source_Folder\\Sample_File,pdf,', 'Language', 'English,', 'Member First Name', 'CONDA!', 'Member Last Name', 'LAVE!']

之后,我遍歷該數組並找到 Filename 關鍵字字符串,路徑肯定是下一個單詞。 正如你可以看到上面的數組,一個! 路徑中是否存在 if 條件來檢查和刪除它。

此外,如果您想檢查此文件是否為 pdf,則可以if "pdf" in path

僅使用字符串方法:

spam = "Member DOB:2012-04-18!:MemberID:00000000!Filename:Source_Folder\Sample_File.pdf!:Language:English!:Member First Name:CONDA!:Member Last Name:LAVE!"
member = dict(item[1:].split(':') if item.startswith(':') else item.split(':') for item in spam.split('!') if item)
print(member)
file_name = member['Filename']
print(file_name)

output

{'Member DOB': '2012-04-18', 'MemberID': '00000000', 'Filename': 'Source_Folder\\Sample_File.pdf', 'Language': 'English', 'Member First Name': 'CONDA', 'Member Last Name': 'LAVE'}
Source_Folder\Sample_File.pdf

輸入行中的冒號和感嘆號存在一些不一致,如果它們是固定的,則可以簡化列表理解。

import re
from pathlib import Path

RE_FILENAME = re.compile(r'Filename:(.*?)!')
TARGET_DIR = Path('path', 'to', 'target', 'dir')

with open(myfile) as fd:
    for line in fd:
        if match := RE_FILENAME.search(line):
            origin_path = Path(*match.group(1).split('\\')).resolve()
            target_path = TARGET_DIR / origin_path.parts[-1]
            if target_path.is_file():
                print(f"File {target_path} exists!")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM