您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

192 行
5.9KB

  1. #!/usr/bin/env python3
  2. import csv
  3. import datetime
  4. from argparse import ArgumentParser
  5. import pandas as pd
  6. def convert_bandwidth(value):
  7. try:
  8. value = int(value)
  9. except:
  10. value = -1
  11. if value == 0:
  12. return 1.4
  13. elif value == 1:
  14. return 3
  15. elif value == 2:
  16. return 5
  17. elif value == 3:
  18. return 10
  19. elif value == 4:
  20. return 15
  21. elif value == 5:
  22. return 20
  23. else:
  24. return 0
  25. if __name__ == "__main__":
  26. parser = ArgumentParser()
  27. parser.add_argument("-f", "--file", required=True, help="Input txt file.")
  28. args = parser.parse_args()
  29. file = open(args.file, "r")
  30. content = file.read()
  31. file.close()
  32. all_csv_lines = list()
  33. csv_header = ["time"]
  34. h1 = False
  35. h2 = False
  36. h3 = False
  37. for line in content.split("\n"):
  38. if line == "" or line == "\n":
  39. break
  40. raw_columns = line.split(";")
  41. csv_line = list()
  42. csv_line.append(raw_columns[0])
  43. for i in range(1, len(raw_columns)):
  44. col = raw_columns[i]
  45. if 'AT+QNWCFG="nr5g_csi"' in col:
  46. if not h1:
  47. csv_header += ["mcs_PDSCH", "ri_PDSCH", "downlink_cqi", "pmi"]
  48. h1 = True
  49. tmp = raw_columns[i + 1].replace('+QNWCFG: "nr5g_csi",', "")
  50. csv_line += tmp.split(",")
  51. elif "AT+QENDC" in col:
  52. if not h2:
  53. csv_header += [
  54. "endc_avl",
  55. "plmn_info_list_r15_avl",
  56. "endc_rstr",
  57. "5G_basic",
  58. ]
  59. h2 = True
  60. tmp = raw_columns[i + 1].replace("+QENDC: ", "")
  61. csv_line += tmp.split(",")
  62. elif 'AT+QENG="servingcell"' in col:
  63. if not h3:
  64. csv_header += [
  65. "connection_state",
  66. "is_tdd",
  67. "mcc",
  68. "mnc",
  69. "cellID",
  70. "PCID",
  71. "earfcn",
  72. "freq_band_ind",
  73. "UL_bandwidth",
  74. "DL_bandwidth",
  75. "TAC",
  76. "RSRP",
  77. "RSRQ",
  78. "RSSI",
  79. "SINR",
  80. "CQI_1-30",
  81. "tx_power",
  82. "srxlev",
  83. "MCC",
  84. "MNC",
  85. "PCID",
  86. "RSRP",
  87. "SINR",
  88. "RSRQ",
  89. "ARFCN",
  90. "band",
  91. ]
  92. h3 = True
  93. if "NOCONN" in raw_columns[i + 1]:
  94. csv_line.append("NOCONN")
  95. csv_line += raw_columns[i + 2].replace('+QENG: "LTE",', "").split(",")
  96. csv_line += (
  97. raw_columns[i + 3].replace('+QENG:"NR5G-NSA",', "").split(",")
  98. )
  99. elif "SEARCH" in raw_columns[i + 1]:
  100. csv_line.append("SEARCH")
  101. csv_line += [""] * 25
  102. elif "OK" == raw_columns[i + 1]:
  103. csv_line.append("OK")
  104. csv_line += [""] * 25
  105. else:
  106. csv_line.append("undefined")
  107. csv_line += [""] * 25
  108. all_csv_lines.append(csv_line)
  109. outputfile = open(args.file.replace("txt", "csv"), "w")
  110. writer = csv.writer(outputfile, delimiter=",", lineterminator="\n", escapechar='\\')
  111. writer.writerow(csv_header)
  112. #print(all_csv_lines)
  113. for l in all_csv_lines:
  114. #print(l)
  115. writer.writerow(l)
  116. outputfile.close()
  117. outputfile = open(args.file.replace("txt", "csv"), "r")
  118. serial_df = pd.read_csv(outputfile,
  119. converters={"UL_bandwidth": convert_bandwidth, "DL_bandwidth": convert_bandwidth},
  120. )
  121. serial_df = serial_df.drop(columns=["MCC", "MNC"])
  122. serial_df["datetime"] = pd.to_datetime(
  123. serial_df["time"].apply(lambda x: datetime.datetime.fromtimestamp(x))
  124. )
  125. serial_df.to_csv(args.file.replace("txt", "csv"))
  126. outputfile.close()
  127. exit()
  128. delete_string = [
  129. 'AT+QNWCFG="nr5g_csi";',
  130. '+QNWCFG: "nr5g_csi"',
  131. 'AT+QENG="servingcell";+QENG: "servingcell",',
  132. "+QENG:",
  133. "AT+QENDC;+QENDC:",
  134. ]
  135. for d in delete_string:
  136. content = content.replace(d, ",")
  137. content = (
  138. content.replace(";", "")
  139. .replace(" ", "")
  140. .replace(",,,", ",")
  141. .replace('"', "")
  142. .replace("LTE,", "")
  143. .replace("NR5G-NSA,", "")
  144. )
  145. header = "time,mcs,ri,cqi,pmi,conn_state,is_tdd,MCC,MNC,cellID,PCID,earfcn,freq_band_ind,UL_bandwidth,DL_bandwidth,TAC,RSRP,RSRQ,RSSI,SINR,CQI,tx_power,srxlev,MCC,MNC,PCID,RSRP,SINR,RSRQ,ARFCN,band,endc_avl,plmn_info_list_r15_avl,endc_rstr,5G_basic\n"
  146. csv_path = args.file.replace("txt", "csv")
  147. print("Write to: {}".format(csv_path))
  148. csv_string = header
  149. for csv_line in content.split("\n"):
  150. if len(header.split(",")) == len(csv_line.split(",")):
  151. csv_string += csv_line + "\n"
  152. else:
  153. # print("{} found {}".format(len(header.split(",")), len(csv_line.split(","))))
  154. print("Could not interpret string: {}".format(csv_line))
  155. print(
  156. "Expect {} columns got {}".format(
  157. len(header.split(",")), len(csv_line.split(","))
  158. )
  159. )
  160. csv_string_io = StringIO(csv_string)
  161. serial_df = pd.read_csv(csv_string_io)
  162. serial_df = serial_df
  163. serial_df["datetime"] = pd.to_datetime(
  164. serial_df["time"].apply(lambda x: datetime.datetime.fromtimestamp(x))
  165. )
  166. serial_df.to_csv(csv_path)
  167. print(serial_df)