我正在尝试构建一个脚本,从一堆.txt中获取某些信息,并将它们附加到csv中。txt文件正在处理来自软件的日志。我运行的每个项目都会生成一个日志,我需要获取信息来建立月度报告
我拥有的:一个脚本,它在文件夹中遍历所有这些日志,找到字符串片段(我需要的信息),并将它们放入一个新的csv中。如果满足.txts中的所有条件,它就可以工作
我遇到的问题是:如果其中一个.txt不符合脚本要求(即:没有我要查找的字符串),脚本将停止运行并返回错误
当然有更有效的方法来做到这一点,但这是我迄今为止所做的:
import re
import os.path, sys
import csv
path = r"C:\Users\r o d r i g o\Desktop\001 - progamer\python\03 - logpix\relatorios"
dirs = os.listdir(path)
relatorio = open(r'C:\Users\r o d r i g o\Desktop\001 - progamer\python\03 - logpix\relatorios\relatorio.csv', 'w')
writer = csv.writer(relatorio)
writer.writerow(['log', 'Nome', 'Projeção', 'Câmera', 'Número de fotos', 'Image Scale', 'Point Density', 'Min Number Matches', 'Step 1', 'Step 2'])
在上面,我定义路径(我的.txts所在的位置)并编写csv的第一行
def script():
for item in dirs:
fullpath = os.path.join(path,item)
if fullpath.endswith(".txt"):
logpix = open(fullpath)
head, tail = os.path.split(fullpath)
x = logpix.read()
m_name = re.search('Name = <(.*)>', x)
m_proj = re.search('WKT Output = <PROJCS(.*),GEOGCS', x)
m_cammodel = re.search('camera model <(.*)(RGB)', x)
m_numimg = re.search('Cameras with (.*) different images', x)
m_imscale = re.search('Image scale = <(.*)>', x)
m_ptdens = re.search('Point density = <(.*)>', x)
m_match = re.search('Minimum number of matches = <(.*)>', x)
m_step1 = re.search('Step1<<< done in (.*)ms', x)
m_step2 = re.search('Step2<<< done in (.*)ms', x)
name = m_name.group(1)
proj = m_proj.group(1)
cammodel = m_cammodel.group(1)
numimg = m_numimg.group(1)
imscale = m_imscale.group(1)
ptdens = m_ptdens.group(1)
match = m_match.group(1)
step1 = m_step1.group(1)
step2 = m_step2.group(1)
writer.writerow([tail, name, proj, cammodel, numimg, imscale, ptdens, match, step1, step2])
script()
relatorio.close()
在上面,我使用操作系统遍历每个.txt文件;然后用搜索找到我需要的信息;创建变量将这些变量转换成字符串;将这些变量写入csv
问题是,某些.txt可能没有我正在创建的变量之一(例如没有步骤2,或者没有相机模型)。如果是这样的话,我的csv将显示为空,并显示一条错误消息:
in script()
29 name = m_name.group(1)
30 proj = m_proj.group(1)
---> 31 cammodel = m_cammodel.group(1)
32 numimg = m_numimg.group(1)
33 imscale = m_imscale.group(1)
AttributeError: 'NoneType' object has no attribute 'group'
在本例中,其中一个文件没有相机模型
如果找不到变量,如何告诉程序忽略它?还是填上不适用
我试着玩了一些,但我不知道该放在哪里。任何帮助都是非常感激的,哪怕只是为了把我推向正确的方向
由于
re.search
在未找到匹配项时返回None
,因此您可以简单地执行以下操作:所以当
m_cammodel
是None
时cammodel
将被分配None
将以下代码视为伪代码。您还可以使用
try-catch
而不是if语句,因为在Python中异常很便宜:相关问题 更多 >
编程相关推荐