2011-03-10 65 views
0

我有一個很大的麻煩,給我的文本文件,我需要解析。這是我解析它的第三次嘗試(我嘗試了C和PHP,它們似乎以不同的方式失敗)。提取一個子字符串使python for循環中斷

我有這個非常簡單的代碼:

import fileinput 

for line in fileinput.input(['basin_stclair.txt']): 
    print line[0:64] 

出於某種原因,第一個打印後的代碼退出。

如果我打印整個行然後它永遠不會停止,但行仍然組合。 (如果我只讓一個迭代循環來看,我得到兩個線(14個浮子)

文本文件看起來像這樣(幾百行像這樣的,7輛彩車):

1.749766 3.735660 0.294098 310.461737 0.000000 0.231367 0.230505

當我在凱特複製整個文本它得到所有混亂和線條相結合。

文本文件是使用Windows機器上EXCELL製造。(我的工作在Linux中)。

任何想法?

+1

您可以粘貼輸出以下命令:'hexdump -C basin_stclair.txt |頭' – 2011-03-10 18:30:05

+0

如果你想複製每一行的前64或更少的列,你可以很容易地在vim中做到這一點。在vim中打開文件,然後按'g'' g'' |''''''''''''''''''''''''''''' (注意'^ V'表示按一個按鍵擊打CTRL-V)現在用':tabedit'打開一個新文件,並用'p'將其粘貼。做':w filename'來保存。如果文件的最後一行至少包含64個字符,則這隻會按照公佈的方式工作。 – intuited 2011-03-10 18:34:26

回答

3

你的文件中的換行符存在一些問題。嘗試使用Python的通用換行符支持打開文件:

for line in open('basin_stclair.txt', 'U'): 
    print line[0:64] 
+0

這個工程,謝謝!這是有道理的,字符是斷線。 – OlivierLi 2011-03-10 18:35:03

+0

+1用於識別可能是什麼問題。請注意,'fileinput.input'(OP正在使用而不是'open')具有相同的模式標誌參數。 – phooji 2011-03-10 18:38:04

+0

@phooji:我知道這也可以用'fileinput.input()'來完成,但它看起來有點沒有意義。 – 2011-03-10 18:40:44

1

你打算打印第64行嗎?如果是這樣,請試試這樣的:

i = 0 
for line in fileinput.input(['basin_stclair.txt']): 
    print line[0:64] 
    if i > 63: 
    break 
    i = i + 1 

您是否試圖打印每行的前64個字符?試試這樣的:

for line in fileinput.input(['basin_stclair.txt']): 
    if len(line) > 63: 
     print line[0:64] 
+0

我正在嘗試打印前64個字符。檢查長度似乎並不奏效。從我收集的每一行python讀取的內容基本上是由未知字符分隔的兩行。 – OlivierLi 2011-03-10 18:33:16

+0

@Stranger_in_the_night:請參閱@Sven Marnach的建議。由於您正在打開一個在Windows中生成的文件,該文件使用與Linux不同的行結尾,因此您可能希望在通用換行支持中使用「打開」。 – phooji 2011-03-10 18:35:53

+0

即使行中的字符少於64個字符,打印此段'line [0:64]',甚至只是'line [:64]'都是安全的,因此不需要首先驗證行長度。 – PaulMcG 2011-03-10 18:49:27