2014-10-31 60 views
1

我有一个文本文件:阅读数字在python

30.154852145,-85.264584254 
15.2685169645,58.59854265854 
... 

我有以下python脚本:

count = 0 

while True: 
     count += 1 
     print 'val:',count 
     for line in open('coords.txt'): 
       c1, c2 = map(float, line.split(',')) 
       break 
     print 'c1:',c1 
     if count == 2: break 

我想c1 = 15.2685169645val: 2。有人可以告诉我我在搞什么吗?

+0

在Python中读取包含数字数据的CSV文件的一个很好的替代方法是使用[numpy.genfromtxt](http://docs.scipy.org/doc/numpy /reference/generated/numpy.genfromtxt.html)。另一个是[pandas.read_csv](http://pandas.pydata.org/pandas-docs/dev/io.html#io-read-csv-table)。 – tssch 2014-10-31 14:26:05

回答

1

使用自己的循环:

with open('coords.txt') as f: 
    count = 1 
    while True: 
     for line in f: 
      print 'val: {}'.format(count) 
      c1, c2 = map(float, line.split(',')) 
      print("c1 = {!r}".format(c1)) 
      if count == 2: 
       break 
      count += 1 
     break 
+0

感谢您的回复,但它仍然无法正常工作..我可能会遗漏一些东西......它只是输出c1 = 30.154852145 ...我想要if语句来指示我想要多少个c1值...所以如果我说如果计数== 2,那么它应该在第一个循环中输出c1 = 30.154852145,然后在下一次迭代中输入c1 = 15.2685169645 – user2468702 2014-10-31 14:33:38

+0

我编辑过,但除非您在for循环外执行某些操作,否则while循环是不必要的 – 2014-10-31 14:34:28

+0

我很抱歉...它是这样做的,但它不会输出前一个....说我有4个总的坐标,并且我设置了if语句在计数== 3处打破,那么我想要第一个在while循环的每次运行中输出三个值..如果这有意义? – user2468702 2014-10-31 14:37:27

3

通过每次重新打开该文件,您可以重新从头开始阅读。

只要打开该文件一旦:

with open('coords.txt') as inputfile: 
    for count, line in enumerate(inputfile, 1): 
     c1, c2 = map(float, line.split(',')) 
     print 'c1:',c1 
     if count == 2: break 

这也使用文件对象a context manager所以with声明会为你关闭它做一次,并使用enumerate()做计数。

+0

谢谢...我其实需要while循环来进行其他计算......请将我的消息阅读到下面的@Cyber​​。你可以用我编的代码编辑它吗? – user2468702 2014-10-31 14:20:06

+0

@ user2468702:您仍然使用'with'语句只打开一次文件对象。把'while'循环放在'for'循环的地方,然后调用'inputfile.readline()'或'next(inputfile)'来获得下一行。 – 2014-10-31 14:21:21