python使用while和for循环读取并处理文件中的每一行

时间:2016-03-22 00:23:02

标签: python if-statement for-loop while-loop

输入:.txt文件包含许多行&$ 39; $ GPGSV,1,1,01,01 ,,, 26 * 7D'

输出:26

import subprocess
import csv
from string import split

f = open('GPS_SNR.csv', 'wb')

while True:
    with open('EMNA_GPS.txt', 'r') as g:        
        for line in g: 
            tempstr = line.split(',')[7]
            GPSstr = tempstr.split('*')[0]
            print GPSstr
            GPS = float(GPSstr)
            print type(GPS)
            wr = csv.writer(f, dialect = 'excel')
        wr.writerow([GPS])
        g.close()

发生了什么: 无限循环永远不会停止...让我们说文件中有100行;然而,有数千行写入.csv而不是100行。

我应该使用' if = EOF'声明?

2 个答案:

答案 0 :(得分:0)

主要问题是不必要的while循环。您遍历文本文件中的行,因此您不需要它。

import csv
from string import split

f = open('GPS_SNR.csv', 'wb')

with open('EMNA_GPS.txt', 'r') as g:        
    for line in g: 
        tempstr = line.split(',')[7]
        GPSstr = tempstr.split('*')[0]
        GPS = float(GPSstr)
        wr = csv.writer(f, dialect = 'excel')
        wr.writerow([GPS])

答案 1 :(得分:0)

for循环将迭代文件中的每一行。 Python会自动检查文件结尾并为您关闭文件(使用with open语法)。

import csv

with open('EMNA_GPS.txt', 'r') as g, open('GPS_SNR.csv', 'wb') as f: 
    wr = csv.writer(f, dialect = 'excel')
    for line in g: 
        tempstr = line.split(',')[7]
        GPSstr = tempstr.split('*')[0]
        print GPSstr
        GPS = float(GPSstr)
        print type(GPS)    
        wr.writerow([GPS])