[英]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.