2014-10-31 54 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