读取文件的最后20个字节

时间:2018-11-17 20:01:12

标签: powershell cmd

在最后20个字节的图像文件中,有一个我需要检索的校验和。我看过Get-Content命令。有没有一种方法可以使读数反向,使其从文件末尾开始?如果不是,是否还有其他命令可用来读取文件的最后20个字节?

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-content?view=powershell-6

1 个答案:

答案 0 :(得分:6)

您可以将#!/usr/bin/env python from subprocess import Popen, PIPE import time import sys import cv2 import os import csv import argparse import numpy as np import matplotlib.pyplot as plt import matplotlib.patches as mpatches from collections import OrderedDict from datetime import datetime PIP_CMD = 'sudo stdbuf -o0 ./pip_sense.v2 l l | stdbuf -o0 grep -P "TX:03(376|004)"' def run(command): process = Popen(command, stdout=PIPE, shell=True) while True: line = process.stdout.readline().rstrip() if not line: break yield line print ('Starting...') def createFolder(directory): try: if not os.path.exists(directory): os.makedirs(directory) except OSError: print ('Error: Creating directory. ' + directory) createFolder('/home/piptag/pip-test/capture_webcam/EXPERIMENTS') file1 = open('/home/piptag/pip-test/capture_webcam/EXPERIMENTS/3376.txt','w') file1.write("Time Stamp \t TX ID \t RSSI \tSEQ NO \tCAP \tX-Axis \tY-Axis \tZ-Axis \t X \t Y \t Z \n") # Header line file1.write("-------------------------------------------------------------------------------------------------------------------------------------\n") file2 = open('/home/piptag/pip-test/capture_webcam/EXPERIMENTS/3004.txt','w') file2.write("Time Stamp \t TX ID \t RSSI \tSEQ NO \tX-Axis \tY-Axis \tZ-Axis \t X \t Y \t Z \n") # Header line file2.write("-------------------------------------------------------------------------------------------------------------------------------------\n") dirname = "/home/piptag/pip-test/capture_webcam/EXPERIMENTS/" def save_webcam(dirname): cam = cv2.VideoCapture(-1) # was getting error (V4L: can't open camera by index 0), thus changes it to -1 jpg_quality = 75 frame_number = 0 if cam.isOpened(): ret_val, img = cam.read() else: ret_val = False timestamp = int(TS) path = dirname + str(tx) + str("-") + str(timestamp) + ".jpg" cv2.imwrite(path, img, [int(cv2.IMWRITE_JPEG_QUALITY), jpg_quality]) frame_number = frame_number + 1 ##this is the end of the camera program def twos_comp(val, bits): """compute the 2's compliment of int value val""" if (val & (1 << (bits - 1))) != 0: # if sign bit is set e.g., 8bit: 128-255 val = val - (1 << bits) # compute negative value return val # return positive value as is #########################################MAIN################################### if __name__ == "__main__": for line in run(PIP_CMD): raw_data = line.split('\t') if len(raw_data) > 1: TS = raw_data[0][3:] tx = raw_data[3].split(':')[-1] rssi = float(raw_data[4][5:]) crc_ok = True if (raw_data[5] != b'BAD CRC') else False no_drop = True if (raw_data[1] == b'Drop:0') else False # If CRC check is ok and no drop, process the packet if crc_ok and no_drop: data = raw_data[-1].split(':')[-1].split() cat = "" for i in data: cat += str(i) if tx == '03376': save_webcam(dirname) print data CapStatus=data[1] if CapStatus == '50': Cap='0' elif CapStatus == '51': Cap='1' SEQNO1=str(int((data[2]),16)) x_axis1=data[3]+data[4] y_axis1=data[5]+data[6] z_axis1=data[7]+data[8] TX1=tx x1 = twos_comp(int(x_axis1,16), 16) * 0.0039 #* 9.80665 #the value is multiplied by 0.004 as the ADXL345 reports data as 4mg per 1lsb y1 = twos_comp(int(y_axis1,16), 16) * 0.0039 #* 9.80665 #the value is multiplied by 0.004 as the ADXL345 reports data as 4mg per 1lsb z1 = twos_comp(int(z_axis1,16), 16) * 0.0039 #* 9.80665 #the value is multiplied by 0.004 as the ADXL345 reports data as 4mg per 1lsb st1 = str(TS) + "\t "+ "{:<5}".format(str (TX1)) + "\t" + "{:<10}".format(str (rssi)) + "{:<5}".format(SEQNO1) + "\t" + "{:<5}".format(str (Cap)) + "\t" + "{:<5}".format(str (x_axis1)) + "\t" + "{:<5}".format(str (y_axis1)) + "\t"+ "{:<5}".format(str(z_axis1)) + "\t" + "{:<5}".format(str(x1)) + "\t" + "{:<5}".format(str(y1)) + "\t" + "{:<5}".format(str(z1)) +"\n" file1.write(st1) elif tx == '03004': save_webcam(dirname) print data SEQNO2=str(int((data[1]),16)) x_axis2=data[2]+data[3] y_axis2=data[4]+data[5] z_axis2=data[6]+data[7] TX2=tx x2 = twos_comp(int(x_axis2,16), 16) * 0.0039 #* 9.80665 #the value is multiplied by 0.004 as the ADXL345 reports dataas 4mg per 1lsb y2 = twos_comp(int(y_axis2,16), 16) * 0.0039 #* 9.80665 #the value is multiplied by 0.004 as the ADXL345 reports data as 4mg per 1lsb z2 = twos_comp(int(z_axis2,16), 16) * 0.0039 #* 9.80665 #the value is multiplied by 0.004 as the ADXL345 reports data as 4mg per 1lsb st2 = str(TS) + "\t "+ "{:<5}".format(str (TX2)) +"\t "+ "{:<10}".format(str (rssi)) + "{:<5}".format(SEQNO2) + "\t" + "{:<5}".format(str (x_axis2)) + "\t"+ "{:<5}".format(str (y_axis2)) + "\t"+ "{:<5}".format(str(z_axis2))+ "\t"+"{:<5}".format(str(x2)) + "\t" + "{:<5}".format(str(y2))+ "\t"+ "{:<5}".format(str(z2)) +"\n" file2.write(st2) file1.close() file2.close() 的{​​{1}}参数与Get-Command参数的-Tail值结合使用:

Byte

与文档相反,-Encoding并不总是作用于行上。

相关问题