2014-10-09 30 views
1

我正在從750行的文本文件中讀取數據。這是我的代碼:從文件中讀取的Python突然停止

x = 0 
with open(path.join(_path, _filename), 'rU') as f: 
    for line in f: 
     print x, line 
     x += 1 

過程在行713這總是停在打印出:

709 83968|10-07-2014 04:00:00|4607|8059|JNBO=4Y8%_LLLC*6K/&:).|"LC[IB91/""L+E>\B%3K#VM&"|"PHS[D_(""%OUR3\6VH^<!M"""|74005|57009|0|0 
710 83969|10-07-2014 04:00:00|1391|8059|I?WWB^!KFY3EY\QD50H/.0|KSN<U$-&?*END,=GHL3<N%|AHC\UJ70%)0/:2K&7A22F&|74005|57009|0|0 
711 84349|10-07-2014 04:00:00|36518|8059|C$>P!_8!TTDJK*[email protected]|O!!LB_I2+ARD]W!)U_S56)|"A3$(74Q2\74_/2'3;<\%5"""|74005|74004|0|0 
712 80354|10-07-2014 04:00:00|7267|8059|[email protected]#JK4LC;M_-O!<#.95B/|N8#2R&=B[4]D7KOD\3`CI#|"B,[`Z=K$*#36;7""L;9^,6("|74005|57009|0|0 
713 76910|10-07-2014 

這是該文件的節選:

83968|10-07-2014 04:00:00|4607|8059|JNBO=4Y8%_LLLC*6K/&:).|"LC[IB91/""L+E>\B%3K#VM&"|"PHS[D_(""%OUR3\6VH^<!M"""|74005|57009|0|0 
83969|10-07-2014 04:00:00|1391|8059|I?WWB^!KFY3EY\QD50H/.0|KSN<U$-&?*END,=GHL3<N%|AHC\UJ70%)0/:2K&7A22F&|74005|57009|0|0 
84349|10-07-2014 04:00:00|36518|8059|C$>P!_8!TTDJK*[email protected]|O!!LB_I2+ARD]W!)U_S56)|"A3$(74Q2\74_/2'3;<\%5"""|74005|74004|0|0 
80354|10-07-2014 04:00:00|7267|8059|[email protected]#JK4LC;M_-O!<#.95B/|N8#2R&=B[4]D7KOD\3`CI#|"B,[`Z=K$*#36;7""L;9^,6("|74005|57009|0|0 
76910|10-07-2014 04:00:00|49425|8059|"D'A\<(%N?FS\ARP??""CJ0."|"H`]8#E^"")T""P""0':]OZ%V*"|"F'),+F`6WU?UT>""=K<#PC."|74005|74004|0|0 
84356|10-07-2014 04:00:00|3236|8059|"GT&]S-7<A%MSBO>""Z2(T%+"|F6YDP\;[email protected]_4?BW!1VIC1O!|P/O/9W)(YJ&+:\=HK)*OA$|74005|55427|0|0 
89539|10-07-2014 04:00:00|1113|8059|"GP',L]BZVELBMY`6(&4%^%"|"L2`GSTCJ:^.\G\I:'SQ*T'"|"JD^28<IKKQ6=%7V/FX6-['"|74005|74004|0|0 

線713是這個片段底部的第三個。

我想它認爲它到達最後(也許是一個EOF字符?)。

任何想法該文件有什麼問題?

UPDATE:這是整個文件>http://dpaste.com/3CCGZY9

UPDATE 2:這是從VIM截圖:https://dl.dropboxusercontent.com/u/2423935/err.jpg(導致問題被高亮線)

UPDATE 3:似乎粘貼從背面dpaste解決了這個問題。但是,我無法爲此做任何事情,因爲解析之前的文件是從FTP服務器下載的。

try: 
    connection = FTP("<SERVER_IP>") 
    connection.login("<username>", "<pass>") 
    connection.cwd("dir1") 
    filenames = connection.nlst() 
    filenames = sorted(filenames) 
    for name in filenames: 
     exists = path.isfile(path.join(_path, name)) 
     if not exists: # fetch it!! 
      localfile = open(path.join(_path, name), 'wb') 
      connection.set_pasv(False) 
      connection.retrbinary("RETR " + name, 
            localfile.write, 1024) 
except all_errors as e: 
    log.error("Cannot connect to FTP Server because %s" % repr(e)) 

更新4:這我使用從FTP下載的代碼,這是實際的文件:https://dl.dropboxusercontent.com/u/2423935/source.txt這是十六進制轉儲:https://dl.dropboxusercontent.com/u/2423935/hex.txt

+0

我無法使用您提供的代碼和輸入重現問題。所有行都被正確讀取和「打印」。 – 2014-10-09 08:50:57

+0

適合我,在Linux上使用Python 2.7.6。你在用什麼? – 2014-10-09 08:51:32

+0

同樣。 Linux和python 2.7。文件中有750行相同類型的行。它可能是內存問題嗎? – xpanta 2014-10-09 08:53:22

回答

0

我coulnd't上重現問題提供的數據。但是,作爲一個猜測,也許它與緩衝有關?然後,嘗試:

sys.stdout.flush() 

打印後。我指着那個方向,因爲它沒有顯示任何錯誤。

否則請嘗試以不變的形式提供整個文件(例如將其上傳到某處)。

+0

謝謝。但是,它仍然是一樣的。我在打印命令後面添加了flush()。我仍然得到相同的輸出。 – xpanta 2014-10-09 09:01:57

+0

我更新了我的問題並添加了整個文件。 – xpanta 2014-10-09 09:03:01

+0

有趣的是,我仍然無法重現這個問題 - 對我來說,它顯示了所有739行。我想知道在你的文件中是否有一個不可打印的字符,當你將它粘貼到dpaste時會丟失 - 你能否從dpaste獲取文件並將其與你的程序一起運行?也許文件之間有區別 - 那麼它很容易找到。 – vetham 2014-10-09 09:10:27

0

該文件在Windows下製作,並在Linux下處理。可能存在許多問題,即來自的簡單複製粘貼顯示文件的圖像可能由非打印字符引起的解決。

行結束通常由任何版本的Python正確處理,我考慮的是Windows(帶有BOM標記)的原生UTF16文本文件,或者更可能是某些程序用於結尾的文件(^Z)字符添加(還有一些)作爲舊CP-M操作系統的回憶(恐龍使用它...)。它可以很容易地修復,但不是沒有文件或十六進制轉儲的精確副本。

+0

我添加了文件的實際版本和十六進制版本。希望有所幫助。 – xpanta 2014-10-09 11:00:19

+0

@xpanta:很好,文件具有Windows行尾,文件字符沒有結尾,但它在開始時有一個UTF8 BOM。不,我可以嘗試重現... – 2014-10-09 12:08:06

+0

@xpanta:不幸的是,我無法重現。我把BOM放在文件的開頭,並且在FreeBSD 9上使用Python 2.7.6都可以正常工作。爲了確認,測試文件的md5是'aa310f96a3187125142d2f3681791f52' – 2014-10-09 13:39:55