scantime = time.strftime('%Y-%m-%d %X', time.localtime(time.time()))
时间: 2024-02-28 12:44:03 浏览: 170
这段代码的作用是获取当前时间并格式化为字符串,格式为年-月-日 时:分:秒。其中,time.time() 表示当前时间的时间戳(距离1970年1月1日0时0分0秒的秒数),time.localtime() 将时间戳转换为本地时间(即当前所在时区的时间),并返回一个时间元组,time.strftime() 将时间元组转换为指定格式的字符串。最后,将格式化后的时间字符串赋值给变量 scantime。
相关问题
详细解释一下这段代码GTV_indexes = [] GTVs_sum = np.zeros((512,512)) # Find the cuts containning GTV contours minXY = 600 maxXY = -1 for time in times: path = folder+patient+'\\'+str(int(time)) # Find the filenames starting with CT minXY1,maxXY1,GTV_index = findContours(path,isPlot=False) GTV_indexes=np.append(GTV_indexes,GTV_index) if minXY>minXY1: minXY = minXY1 elif maxXY<maxXY1: maxXY = maxXY1 print('minXY={}'.format(minXY),'maxXY={}'.format(maxXY)) GTV_indexes = np.array(GTV_indexes) GTV_indexes = np.unique(GTV_indexes).astype(int) print('Cuts including GTVs: {}'.format(GTV_indexes)) writeToFile(GTV_indexes,folder+patient+'\\GTV_indexs.txt') #将DICOM文件的拍摄时间与呼吸曲线对应 #CT scanning time # 由vxp文件获取开始扫描的时刻 vxpPath = folder+patient+'\\0006863819_20200730_090003.vxp' injectTime = getInjectionTime(vxpPath) print('Initial injection time of CT from vxp file:{}'.format(injectTime)) # 得到GTV cut的扫描时刻 scanTimes = np.ones((len(times),len(cuts))) print('scan time of each phase CT') for i,time in enumerate(times,start=0): for j,cut in enumerate(cuts,start=0): filename = folder+patient+'\\'+str(int(time))+'\\CT.{}'.format(patient)+'.Image {}.dcm'.format(int(cut)) scanTime = getScanTime(filename) scanTimes[i,j] = scanTime scanTimes = scanTimes-scanTimes.min()+injectTime # 画出呼吸曲线,并得到相应的呼吸幅度 amplitudes = getBreathingCurve(vxpPath,scanTimes,isplot=1) writeToFile(scanTimes,folder+patient+'\\scanTimes.txt') writeToFile(amplitudes,folder+patient+'\\amplitudes.txt')
这段代码的作用是根据患者的CT扫描图像数据,找到包含肿瘤的切片,并且将这些切片的扫描时间与呼吸曲线对应起来。下面对代码进行逐行解释:
1. `GTV_indexes = []`: 初始化一个空列表,用于存储包含GTV轮廓的切片索引。
2. `GTVs_sum = np.zeros((512,512))`: 初始化一个全零矩阵,用于后面将包含GTV轮廓的切片叠加起来,得到一个包含所有GTV轮廓的二维矩阵。
3. `minXY = 600, maxXY = -1`: 初始化minXY和maxXY,用于后面记录包含GTV轮廓的切片的最小和最大索引。
4. `for time in times:`: 对每个时间点进行循环。
5. `path = folder+patient+'\\'+str(int(time))`: 构造DICOM文件夹的路径。
6. `minXY1, maxXY1, GTV_index = findContours(path, isPlot=False)`: 调用findContours函数,返回包含GTV轮廓的切片的最小和最大索引,以及切片索引。
7. `GTV_indexes=np.append(GTV_indexes,GTV_index)`: 将切片索引添加到GTV_indexes列表中。
8. `if minXY>minXY1: minXY = minXY1 elif maxXY<maxXY1: maxXY = maxXY1`: 更新最小和最大索引。
9. `GTV_indexes = np.array(GTV_indexes)`: 将GTV_indexes转换为numpy数组。
10. `GTV_indexes = np.unique(GTV_indexes).astype(int)`: 去除重复的切片索引,并将其转换为整数类型。
11. `writeToFile(GTV_indexes,folder+patient+'\\GTV_indexs.txt')`: 将包含GTV轮廓的切片索引写入文件。
12. `vxpPath = folder+patient+'\\0006863819_20200730_090003.vxp'`: 构造呼吸曲线文件的路径。
13. `injectTime = getInjectionTime(vxpPath)`: 调用getInjectionTime函数,获取CT扫描的开始时间。
14. `scanTimes = np.ones((len(times),len(cuts)))`: 初始化一个全1矩阵,用于后面存储每个切片的扫描时间。
15. `for i,time in enumerate(times,start=0): for j,cut in enumerate(cuts,start=0):`: 对每个时间点和切片进行循环。
16. `filename = folder+patient+'\\'+str(int(time))+'\\CT.{}'.format(patient)+'.Image {}.dcm'.format(int(cut))`: 构造DICOM文件的路径。
17. `scanTime = getScanTime(filename)`: 调用getScanTime函数,获取当前切片的扫描时间。
18. `scanTimes[i,j] = scanTime`: 将扫描时间存储到scanTimes矩阵中。
19. `scanTimes = scanTimes-scanTimes.min()+injectTime`: 将所有扫描时间减去最小扫描时间,再加上CT扫描的开始时间,得到每个切片的具体扫描时间。
20. `amplitudes = getBreathingCurve(vxpPath,scanTimes,isplot=1)`: 调用getBreathingCurve函数,画出呼吸曲线,并返回相应的呼吸幅度。
21. `writeToFile(scanTimes,folder+patient+'\\scanTimes.txt')`: 将每个切片的扫描时间写入文件。
22. `writeToFile(amplitudes,folder+patient+'\\amplitudes.txt')`: 将呼吸幅度写入文件。
SELECT piats.id, piats.company.name, piats.type, piats.relatedBill, piats.relatedBill2, piats.piats, piats.item.code, piats.item.name, piats.unit.unit, piats.unit.convertFigure, piats.pallet, piats.receiver, piats.scanTime, piats.beExport, piats.exportCnt, piats.exportTime, piats.exportUserName, piats.updateInfo.creator, piats.updateInfo.createdTime, piats.updateInfo.lastOperator, piats.updateInfo.updateTime, piats.udiDi, piats.udiPi FROM com.vtradex.wms.server.model.piats.WmsPiats piats left join WmsPickTicket pick on pick.code = piats.relatedBill left join WmsASN asn on asn.code = piats.relatedBill left join piats.unit where 1=1 and (case when pick.warehouse is null then asn.warehouse else pick.warehouse end) = 1 ORDER BY piats.id DESC; 报错unexpected token: on 怎么修改
根据您提供的 SQL 语句,我发现您的 left join 子句中的表名后面没有指定 ON 条件,导致报错。您可以修改为以下代码:
```
SELECT piats.id, piats.company.name, piats.type, piats.relatedBill, piats.relatedBill2, piats.piats,
piats.item.code, piats.item.name, piats.unit.unit, piats.unit.convertFigure, piats.pallet, piats.receiver,
piats.scanTime, piats.beExport, piats.exportCnt, piats.exportTime, piats.exportUserName,
piats.updateInfo.creator, piats.updateInfo.createdTime, piats.updateInfo.lastOperator,
piats.updateInfo.updateTime, piats.udiDi, piats.udiPi
FROM com.vtradex.wms.server.model.piats.WmsPiats piats
left join WmsPickTicket pick on pick.code = piats.relatedBill
left join WmsASN asn on asn.code = piats.relatedBill
left join piats.unit unit on unit.id = piats.unit.id
where 1=1 and (case when pick.warehouse is null then asn.warehouse else pick.warehouse end) = 1
ORDER BY piats.id DESC;
```
在 left join 子句中,我增加了对 piats.unit 表连接的 ON 条件,并且修改了 where 子句的条件。希望可以帮助到您。
阅读全文