2016-01-14 139 views
0

我有一个正在运行的代码看起来像这样:如何将输出文本格式化为文本文件?

##Prints the latitude and longitude every second. 
import time 
import microstacknode.hardware.gps.l80gps 

if __name__ == '__main__': 
    gps = microstacknode.hardware.gps.l80gps.L80GPS() 
    while True: 
     data = gps.get_gpgga() 
     string=str(data.values()) 
     text_file = open("/home/pi/fyp/gps.txt","a") 
     text_file.write(string + "\n") 
     time.sleep(1) 

这是它的输出:

dict_values(['', '', '', '0', '', 155641.098, '0', 0.0, '$GPGGA', 0.0, '', '', '']) 
dict_values(['', '', '', '0', '', 155642.098, '0', 0.0, '$GPGGA', 0.0, '', '', '']) 
dict_values(['', '', '', '0', '', 155643.098, '0', 0.0, '$GPGGA', 0.0, '', '', '']) 
dict_values(['', '', '', '0', '', 155644.098, '0', 0.0, '$GPGGA', 0.0, '', '', '']) 
dict_values(['', '', '', '0', '', 155645.098, '0', 0.0, '$GPGGA', 0.0, '', '', '']) 

不过,我只需要一些值。 即第8,10和13个值(现在输出为'')。有什么办法来过滤出文本的其余部分,所以我只得到这样的输出:

'','',''   
'','',''   

凡8,第10和第13的值被定位成这样?

回答

1

您可以将dict_values(...)转换为列表并使用列表理解来访问所需的位置。

[list(data.values())[x] for x in [7, 9, 12]] # for 8th, 10th and 13th position 
+0

甜!我得到它的工作。虽然输出有“[]”。是否有可能删除它们,并只有逗号分隔值? – JolyDroneSP

+0

将列表转换为字符串并使用连接方法: my_string =“,”.join(my_list)my_list = [list(data.values())[x] for [7,9,12] #如果你不需要它或没有空间 – maxie

+0

如果你满意,请接受答案。 – maxie

0

像这样的东西应该工作:

import time 
import microstacknode.hardware.gps.l80gps 

if __name__ == '__main__': 
    gps = microstacknode.hardware.gps.l80gps.L80GPS() 
    while True: 
     data = gps.get_gpgga() 
     values = data.values() 
     string = str(values[7]) + ', ' + str(values[9]) + ', ' + str(values[12]) 
     text_file = open("/home/pi/fyp/gps.txt","a") 
     text_file.write(string + "\n") 
     time.sleep(1)