244 lines
8.9 KiB
Python
244 lines
8.9 KiB
Python
import datetime, time, sys
|
|
import numpy as np
|
|
import pyqtgraph as pg
|
|
from pyqtgraph.Qt import QtWidgets
|
|
|
|
def csv_to_nparray(fileName, ContainDateTime, timeRange):
|
|
if ContainDateTime == 'True':
|
|
ContainDateTime = True
|
|
else:
|
|
ContainDateTime = False
|
|
Filter = 0
|
|
itemMaxNum = 50
|
|
if ContainDateTime:
|
|
timeRange = timeRange.split(',')
|
|
if len(timeRange) == 2:
|
|
Filter = 1
|
|
startTime = datetime.datetime.strptime(timeRange[0].strip(),'%Y/%m/%d %H:%M:%S')
|
|
start_timestamp=time.mktime(startTime.timetuple())
|
|
stopTime = datetime.datetime.strptime(timeRange[1].strip(),'%Y/%m/%d %H:%M:%S')
|
|
stop_timestamp=time.mktime(stopTime.timetuple())
|
|
else:
|
|
Filter = 0
|
|
|
|
#读取文件
|
|
with open(fileName, "r") as f:
|
|
recordTotalNum = len(f.readlines())
|
|
f.seek(0)
|
|
|
|
#读取数据文件中的标题行
|
|
itemNames = []
|
|
itemNames.append('SampleNO')
|
|
if ContainDateTime == False:
|
|
itemNames.append('DateTime')
|
|
|
|
tempStr = f.readline()
|
|
tempStr = tempStr.replace(' ','')
|
|
tempStr = tempStr.replace('"','')
|
|
tempStr = tempStr.replace('\t','')
|
|
tempStr = tempStr.replace('\n','')
|
|
temp = tempStr.split(',')
|
|
for i in range(len(temp)):
|
|
temp[i] = temp[i].strip()
|
|
if ContainDateTime == True:
|
|
temp[0] = 'DateTime'
|
|
itemNames.extend(temp)
|
|
# print(itemNames)
|
|
temp = [item for item in itemNames if len(item)>0]
|
|
itemNames = temp[0:itemMaxNum]
|
|
print(f"itemNames:{itemNames}")
|
|
|
|
#读取数据文件中的数据,以浮点数的形式读取
|
|
rawData = np.array([])
|
|
rawData_list = list(rawData)
|
|
recordNum = 1
|
|
for i in range(1, recordTotalNum-1):
|
|
record = []
|
|
line = f.readline()
|
|
line = line.replace('"','')
|
|
line = line.replace('/', ' ')
|
|
line = line.replace('T', ' ')
|
|
line = line.replace('Z', '')
|
|
line = line.replace('\t', '')
|
|
line = line.replace('\n', '')
|
|
substrings = line.split(',')
|
|
|
|
if ContainDateTime:
|
|
substrings[0] = substrings[0].split('.')[0]
|
|
substrings[0] = substrings[0].replace('-',' ')
|
|
substrings[0] = substrings[0].replace(':',' ')
|
|
temp = substrings[0].split()
|
|
date_str = ""
|
|
for value in temp:
|
|
if value == '':
|
|
temp.remove(value)
|
|
datetime_str = temp[0]+'-'+temp[1]+'-'+temp[2]+' '+temp[3]+':'+temp[4]+':'+temp[5]
|
|
if datetime_str == '1970-1-1 1:1:1' or datetime_str == '1970-1-1 1:01:01':
|
|
datetime_str = temp[0]+'-'+temp[1]+'-'+'2'+' '+temp[3]+':'+temp[4]+':'+temp[5]
|
|
dt = datetime.datetime.strptime(datetime_str,'%Y-%m-%d %H:%M:%S')
|
|
timestamp=time.mktime(dt.timetuple())
|
|
else:
|
|
datetime_str = '1971-1-2 1:1:1'
|
|
dt = datetime.datetime.strptime(datetime_str,'%Y-%m-%d %H:%M:%S')
|
|
timestamp=time.mktime(dt.timetuple())
|
|
|
|
record.append(recordNum)
|
|
record.append(timestamp)
|
|
|
|
if ContainDateTime:
|
|
for j in range(1, min(substrings.__len__(), itemMaxNum)):
|
|
try:
|
|
record.append(float(substrings[j].replace(' ','')))
|
|
except:
|
|
record.append(-1)
|
|
pass
|
|
else:
|
|
for j in range(0, min(substrings.__len__(), itemMaxNum)):
|
|
try:
|
|
record.append(float(substrings[j].replace(' ','')))
|
|
except:
|
|
record.append(-1)
|
|
pass
|
|
if Filter:
|
|
if record[1] >= start_timestamp and record[1] <= stop_timestamp:
|
|
recordNum += 1
|
|
rawData_list.append(record)
|
|
else:
|
|
recordNum += 1
|
|
rawData_list.append(record)
|
|
print(f"record:{record}")
|
|
rawData = np.array(rawData_list)
|
|
return itemNames, rawData
|
|
|
|
if __name__ == '__main__':
|
|
#解析参数
|
|
fileName = sys.argv[1]
|
|
timeRange = sys.argv[2]
|
|
ContainDateTime = sys.argv[3]
|
|
curveNum = int(sys.argv[4])
|
|
|
|
itemNamesRaw, recordsRaw = csv_to_nparray(fileName, ContainDateTime, timeRange)
|
|
itemNames = itemNamesRaw
|
|
records = recordsRaw
|
|
|
|
if ContainDateTime == 'True':
|
|
DisplayTime = True
|
|
else:
|
|
DisplayTime = False
|
|
|
|
if DisplayTime == False:
|
|
itemNames = np.delete(itemNames, 1, 0)
|
|
# print(itemNames)
|
|
|
|
itemsNum = itemNames.__len__()
|
|
# print(itemsNum)
|
|
|
|
if DisplayTime == False:
|
|
records = np.delete(records, 1, 1)
|
|
# print(records[:,:])
|
|
|
|
recordsNum = records.__len__()
|
|
|
|
#########################################################################################
|
|
|
|
lasttime = time.time()
|
|
Filter = 0
|
|
timeRange = ['2023-11-24 10:00:00','2023-11-24 17:00:00']
|
|
startTime = datetime.strptime(timeRange[0],'%Y-%m-%d %H:%M:%S')
|
|
start_timestamp=time.mktime(startTime.timetuple())
|
|
stopTime = datetime.strptime(timeRange[1],'%Y-%m-%d %H:%M:%S')
|
|
stop_timestamp=time.mktime(stopTime.timetuple())
|
|
|
|
if not _filename or not os.path.exists(_filename):
|
|
return False, _filename
|
|
|
|
measurement_name = _filename.split('_')[1] # 替换为你的测量名称
|
|
|
|
with open(_filename, "r") as f:
|
|
recordTotalNum = len(f.readlines())
|
|
f.seek(0)
|
|
itemNames = []
|
|
tempStr = f.readline()
|
|
tempStr = tempStr.replace(' ','')
|
|
tempStr = tempStr.replace('"','')
|
|
tempStr = tempStr.replace('\t','')
|
|
tempStr = tempStr.replace('\n','')
|
|
|
|
itemNames.extend(tempStr.split(','))
|
|
for i in range(itemNames.__len__(), 0, -1):
|
|
try:
|
|
if (itemNames[i] == ''):
|
|
itemNames.pop(i)
|
|
except:
|
|
pass
|
|
|
|
recordNum = 1
|
|
for i in range(1, recordTotalNum-1):
|
|
record = []
|
|
line = f.readline()
|
|
#line = line.replace(' ',',')
|
|
#line = line.replace(' ','')
|
|
line = line.replace('"','')
|
|
line = line.replace('\t', '')
|
|
line = line.replace('\n', '')
|
|
|
|
# line = line[0:-2]
|
|
substrings = line.split(',')
|
|
# print(substrings)
|
|
|
|
for k in range(0, substrings.__len__()):
|
|
if substrings[k] == '':
|
|
substrings.pop(k)
|
|
|
|
substrings[0] = substrings[0].replace('/',' ')
|
|
substrings[0] = substrings[0].replace('-',' ')
|
|
substrings[0] = substrings[0].replace(':',' ')
|
|
substrings[0] = substrings[0].replace('.',' ')
|
|
temp = substrings[0].split()
|
|
# print(temp)
|
|
datetime_str = ""
|
|
for value in temp:
|
|
if value == '':
|
|
temp.remove(value)
|
|
# datetime_str = date_str+' '+temp[0]+':'+temp[1]+':'+temp[2]
|
|
if len(temp) > 6:
|
|
datetime_str = temp[0]+'-'+temp[1]+'-'+temp[2]+' '+temp[3]+':'+temp[4]+':'+temp[5]+'.'+ temp[6]
|
|
else:
|
|
datetime_str = temp[0]+'-'+temp[1]+'-'+temp[2]+' '+temp[3]+':'+temp[4]+':'+temp[5]
|
|
|
|
# datetime_str = substrings[0].replace('/','-')
|
|
|
|
log.info(datetime_str)
|
|
datetime_str = datetime_str.strip()
|
|
if datetime_str.count('.') == 0:
|
|
time_value = datetime.strptime(datetime_str, '%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%dT%H:%M:%SZ')
|
|
time_value_bk = datetime.strptime(datetime_str, '%Y-%m-%d %H:%M:%S')
|
|
else:
|
|
time_value = datetime.strptime(datetime_str, '%Y-%m-%d %H:%M:%S.%f').strftime('%Y-%m-%dT%H:%M:%S.%fZ')
|
|
time_value_bk = datetime.strptime(datetime_str[:-4], '%Y-%m-%d %H:%M:%S')
|
|
time_value_st=time.mktime(time_value_bk.timetuple())
|
|
|
|
data_point = {
|
|
"measurement": measurement_name,
|
|
# "tags": {},
|
|
"time": time_value,
|
|
"fields": {}
|
|
}
|
|
|
|
|
|
for j in range(1, substrings.__len__()):
|
|
try:
|
|
data_point['fields'][itemNames[j]] = float(substrings[j].replace(' ',''))
|
|
except:
|
|
pass
|
|
|
|
if Filter:
|
|
if time_value_st >= start_timestamp and time_value_st <= stop_timestamp:
|
|
log.info(data_point)
|
|
influxdb.writeFromDict(data_point)
|
|
else:
|
|
log.info(data_point)
|
|
influxdb.writeFromDict(data_point)
|
|
recordNum += 1
|
|
log.info(time.time() - lasttime)
|
|
return |