尝试从USB GPS清理txt文件,并遇到第三个for loop
的问题。目前有...
deletes = ['$GPGGA', '$GPGSA', '$GPGSV', '$PSRF156', ]
searchquery = '$GPRMC'
with open('Drive_home.txt_rf') as f1:
with open('Drive_home_1.txt', 'w+') as f2:
for lines in f1:
if not any(delete in lines for delete in deletes):
f2.write(lines)
with open('Drive_home_1.txt') as f2:
with open('Drive_home_2.txt', 'w+') as f3:
lines = f2.readlines()
for i, line in enumerate(lines2):
if line.startswith(searchquery):
f3.write(line)
f3.write(lines[i + 1])
with open('Drive_home_2.txt') as f3:
with open('Drive_home_3.txt', 'w+') as f4:
for lines in f3:
if len(lines.rstrip('\n')) >= 105:
f4.write(lines)
由于某种原因,该脚本未创建“ Drive_home_3.txt”。所以不确定为什么不可以。
还可以只用全部for loop
创建一个.txt吗?
更新:当前,将Drive_home_1.txt和Drive_home_2.txt创建到桌面,但尚未创建Drive_home_3.txt。我已经尝试过快速搜索该文件,但是没有任何结果,所以我以为它只是没有被创建。
这是我正在使用的确切代码。我刚刚注意到lines2
应该只是lines
。我也收到错误消息...
回溯(最近通话最近): 文件“ C:\ Users **** \ Desktop \ TestV6.py”,第16行,在 f3.write(lines [i + 1]) IndexError:列表索引超出范围
我认为错误只是来自文件末尾的数据收集,看起来像...
$GPRMC 211536 A 3512.0329 N 8507.6987 W 0.24 220.94 300818 A*70
96.5 50 2 3 -3 236 0 1 1 30-08-18 17:15:36:551
$GPRMC 211537 A 3512.0329 N 8507.6987 W 0 220.94 300818 A*77
96.5 49 2 3 -4 236 0 1 1 30-08-18 17:15:37:549
$GPRMC 211538 A 3512.0325 N 8507.6985 W 0.31 220.94 300818 A*74
96.5 49 2 3 -2 236 0 1 1 30-08-18 17:15:38:469
$GPRMC 211539 A 3512.0325 N 8507.6985 W 0 220.94 300818 A*77
$GPRMC 211540 A 3512.0324 N 8507.6986 W 0.07 220.94 300818 A*7C
$GPRMC 211540 A 3512.0324 N 8507.6986 W 0.07 220.94 300818 A*7C
$GPRMC 211541 A 3512.0324 N 8507.6986 W 0 220.94 300818 A*7A
$GPRMC 211541 A 3512.0324 N 8507.6986 W 0 220.94 300818 A*7A
更新2:
清理脚本,现在我已经...
deletes = ['$GPGGA', '$GPGSA', '$GPGSV', '$PSRF156', ]
searchquery = '$GPRMC'
with open('Drive_home.txt_rf') as f1:
with open('Drive_home_1.txt', 'w+') as f2:
lines = f1.readlines()
for i, line in enumerate(lines):
if line.startswith(searchquery):
if not any(delete in lines[i + 1] for delete in deletes):
f2.write(line)
f2.write(lines[i + 1])
输出一个txt。看起来像...
$GPRMC 204249 A 3504.5449 N 8509.0603 W 0.31 352.89 300818 A*7F
96.5 39 5 14 -2 200 0 1 0 30-08-18 16:42:46:365
$GPRMC 204250 A 3504.5449 N 8509.0605 W 0.32 352.89 300818 A*72
96.5 39 7 22 -3 168 0 0 0 30-08-18 16:42:47:364
$GPRMC 204251 A 3504.5448 N 8509.0606 W 0.77 352.89 300818 A*70
96.5 32 9 24 -2 184 0 1 0 30-08-18 16:42:48:362
$GPRMC 204252 A 3504.5448 N 8509.0608 W 0.37 352.89 300818 A*79
96.5 43 9 15 -4 236 0 1 0 30-08-18 16:42:49:454
$GPRMC 204253 A 3504.545 N 8509.0609 W 0.14 352.89 300818 A*71
96.5 37 23 17 -4 184 0 1 0 30-08-18 16:42:50:967
$GPRMC 204254 A 3504.545 N 8509.061 W 1.52 50.91 300818 A*45
96.5 38 10 21 -3 184 0 1 0 30-08-18 16:42:51:451
现在我再次有一个问题,是否可以在“ $ GPRMC”之后加入下一行,如下所示?
$GPRMC 204244 A 3504.5446 N 8509.0599 W 0 352.89 300818 A*7F 96.5 40 6 11 1 236 0 1 0 30-08-18 16:42:41:451
$GPRMC 204245 A 3504.5447 N 8509.0598 W 0.27 352.89 300818 A*7B 96.5 44 6 9 -9 236 0 1 1 30-08-18 16:42:42:434
$GPRMC 204246 A 3504.5447 N 8509.0598 W 0 352.89 300818 A*7D 96.5 44 7 14 1 217 0 1 0 30-08-18 16:42:43:401
$GPRMC 204247 A 3504.5448 N 8509.0599 W 0.25 352.89 300818 A*75 96.5 35 14 21 2 151 0 1 0 30-08-18 16:42:44:400
我不确定.join()
的工作方式,还是不确定是否可以将每隔一行或与前一行if line.startwith
串联在一起。我不确定是否其他所有行都会成为问题,因为它包含整数并且是浮点数。
答案 0 :(得分:0)
它没有创建文件,因为脚本在到达代码创建位置之前由于错误而停止。您得到的错误告诉您此错误,因为它指向f3.write(lines[i+1])
行,该行位于创建第三个文件的代码块之前。
您收到的错误(list index out of range
)告诉您此错误正在发生,因为您正尝试访问不存在的lines
元素。之所以发生这种情况,是因为您要遍历lines
的最后一个元素,然后尝试访问其后的元素(第i+1
个元素)。