【发布时间】:2019-04-18 15:59:41
【问题描述】:
我有一个 python 脚本,它捕获日志数据并将其转换为二维数组。
脚本的下一部分旨在遍历 .csv 文件并评估每一行的第一列,并确定该值是否等于或介于 2D 数组中的值之间。如果是,则将最后一列标记为 TRUE。如果不是,则将其标记为 FALSE。
例如,如果我的二维数组如下所示:
[[1542053213, 1542053300], [1542055000, 1542060105]]
我的 csv 文件如下所示:
1542053220, Foo, Foo, Foo
1542060110, Foo, Foo, Foo
第一行的最后一列应为 TRUE(或 1),而第二行的最后一列应为 FALSE(或 0)。
我当前的代码如下所示:
from os.path import expanduser
import re
import csv
import codecs
#Setting variables
#Specifically, set the file path to the reveal log
filepath = expanduser('~/LogAutomation/programlog.txt')
csv_filepath = expanduser('~/LogAutomation/values.csv')
tempStart = ''
tempEnd = ''
print("Starting Script")
#open the log
with open(filepath) as myFile:
#read the log
all_logs = myFile.read()
myFile.close()
#Create regular expressions
starting_regex = re.compile(r'\[(\d+)\s+s\]\s+Starting\s+Program')
ending_regex = re.compile(r'\[(\d+)\s+s\]\s+Ending\s+Program\.\s+Stopping')
#Create arrays of start and end times
start_times = list(map(int, starting_regex.findall(all_logs)))
end_times = list(map(int, ending_regex.findall(all_logs)))
#Create 2d Array
timeArray = list(map(list, zip(start_times, end_times)))
#Print 2d Array
print(timeArray)
print("Completed timeArray construction")
#prints the csv file
with open(csv_filepath, 'rb') as csvfile:
reader = csv.reader(codecs.iterdecode(csvfile, 'utf-8'))
for row in reader:
currVal = row[0]
#if currVal is equal to or in one of the units in timeArray, mark last column as true
#else, mark last column as false
csvfile.close()
print("Script completed")
我已经成功地遍历了我的 .csv 文件并获取了每一行的第一列的值,但我不知道如何进行比较。不幸的是,关于值之间的签入,我不熟悉二维数组数据结构。此外,我的 .csv 文件中的列数可能会波动,因此是否有人知道一种非静态方法来确定“最后一列”以便能够在文件中写入该列之后的列?
有人可以帮我吗?
【问题讨论】:
-
我不明白预期的输出。您想将 TRUE/FALSE 作为二维数组中行的最后一个元素吗?将 TRUE/FALSE 添加到 2D 数组中的行?或添加到 csv 行?在那种情况下,您将结果保存在哪里?同一个文件?
-
对不起,你不明白。编写的目标是,如果第一列的值等于或介于二维数组中的值之间,则将 .csv 文件的最后一列(在示例代码中的 values.csv)写入 TRUE。如果不是,则在最后一列写 FALSE。
标签: python arrays csv multidimensional-array