在Python中无法建立超过2个txt.files

时间:2018-10-04 12:31:42

标签: python

尝试从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串联在一起。我不确定是否其他所有行都会成为问题,因为它包含整数并且是浮点数。

1 个答案:

答案 0 :(得分:0)

它没有创建文件,因为脚本在到达代码创建位置之前由于错误而停止。您得到的错误告诉您此错误,因为它指向f3.write(lines[i+1])行,该行位于创建第三个文件的代码块之前。

您收到的错误(list index out of range)告诉您此错误正在发生,因为您正尝试访问不存在的lines元素。之所以发生这种情况,是因为您要遍历lines的最后一个元素,然后尝试访问其后的元素(第i+1个元素)。