从文件中读取的Python突然停止

时间:2014-10-09 08:46:00

标签: python file

我正在阅读750行的文本文件。这是我的代码:

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*KE+U=Y@.|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|K@A#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*KE+U=Y@.|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|K@A#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\;O@_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行是此片段中从底部开始的第3个。

我猜它认为它到达终点(也许是一个EOF角色?)。

任何想法文件有什么问题?

更新:这是整个文件&gt; http://dpaste.com/3CCGZY9

更新2:这是来自vim的屏幕截图:https://dl.dropboxusercontent.com/u/2423935/err.jpg(突出显示问题的行)

更新3:似乎从dpaste粘贴回来解决了这个问题。但是,我无法做任何事情,因为解析之前的文件是从FTP服务器下载的。这是我用来从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:这是实际文件:https://dl.dropboxusercontent.com/u/2423935/source.txt,这是十六进制转储:https://dl.dropboxusercontent.com/u/2423935/hex.txt

2 个答案:

答案 0 :(得分:0)

我无法重现所提供数据的问题。但是,作为猜测,也许它与缓冲有关?然后,尝试:

sys.stdout.flush()

打印后。我指向那个方向,因为它没有显示任何错误。

否则请尝试以未更改的形式提供整个文件(例如,将其上传到某处)。

答案 1 :(得分:0)

该文件在Windows下制作,并在Linux下处理。可能存在许多问题,即由不可打印的字符引起的文件显示图像的简单复制粘贴可能会解决。

行尾通常由任何版本的Python正确处理,因为我在考虑Windows上的原生UTF16文本文件(带BOM标记)或更多可能是文件末尾(^Z)字符用来添加(有些仍然)的程序作为旧CP-M操作系统的回忆(恐龙使用它......)。它可以很容易地修复,但不能没有文件或十六进制转储的精确副本。