コード「MLT-TRR」で始まる行でデータ処理を行う必要があるデータを含む巨大なレポートファイルがあります。今のところ、そのコードで始まるスクリプトのすべての行を抽出し、それらを別々に配置しました。ファイル。新しいファイルは次のようになります-Rules.txt。
MLT-TRR Warning C:\Users\Di\Pictures\SavedPictures\top.png 63 10 Port is not registered [Folder: 'Picture']
MLT-TRR Warning C:\Users\Di\Pictures\SavedPictures\tree.png 315 10 Port is not registered [Folder: 'Picture.first_inst']
MLT-TRR Warning C:\Users\Di\Pictures\SavedPictures\top.png 315 10 Port is not registered [Folder: 'Picture.second_inst']
MLT-TRR Warning C:\Users\Di\Pictures\SavedPictures\tree.png 317 10 Port is not registered [Folder: 'Picture.third_inst']
MLT-TRR Warning C:\Users\Di\Pictures\SavedPictures\top.png 317 10 Port is not registered [Folder: 'Picture.fourth_inst']
これらの各行について、「[Folder: 'Picture」の後にあるデータを抽出する必要があります。最初の行の場合のように「[Folder:' Picture」の後にデータがない場合は、その行をスキップして次に進みます。次の行に。また、これらの各行のファイル名を抽出したいと思います-top.txt、tree.txt
これはループを伴い、混乱するため、これを行うためのより簡単な方法を考えることはできませんでした。私がこれを行うことができる方法はありますか?各行のファイルパスと終了データのみを抽出します。
import os
import sys
from os import path
import numpy as np
folder_path = os.path.dirname(os.path.abspath(__file__))
inFile1 = 'Rules.txt'
inFile2 = 'TopRules.txt'
def open_file(filename):
try:
with open(filename,'r') as f:
targets = [line for line in f if "MLT-TRR" in line]
print targets
f.close()
with open(inFile1, "w") as f2:
for line in targets:
f2.write(line + "\n")
f2.close()
except Exception,e:
print str(e)
exit(1)
if __name__ == '__main__':
name = sys.argv[1]
filename = sys.argv[1]
open_file(filename)
ファイル名やその他のデータを抽出するには、正規表現を使用できる必要があります。
import re
for line in f:
match = re.match(r"^MLT-TRR.*([A-Za-z]:\\[-A-Za-z0-9_:\\.]+).*\[Folder: 'Picture\.(\w+)']", line)
if match:
filename = match.group(1)
data = match.group(2)
これは、後のデータ'Picture.
に英数字とアンダースコアのみが含まれていることを前提としています。また、ファイル名[A-Za-z0-9_:\\.]
がおかしい場合は、ファイル名部分で許可されている文字を変更しなければならない場合があります。また、ファイル名がWindowsのドライブ文字(絶対パス)で始まることを前提としているため、行内の他のデータと区別しやすくなっています。
ファイル名のベース名だけが必要な場合は、それを抽出した後、os.path.basename
またはを使用できますpathlib.Path.name
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加