首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python从文件读取突然停止

Python从文件读取突然停止
EN

Stack Overflow用户
提问于 2014-10-09 16:46:00
回答 2查看 167关注 0票数 1

我正在从一个750行的文本文件中读取。这是我的代码:

代码语言:javascript
复制
x = 0
with open(path.join(_path, _filename), 'rU') as f:
    for line in f:
        print x, line
        x += 1

进程总是在第713行停止。这是打印输出:

代码语言:javascript
复制
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

下面是文件的摘录:

代码语言:javascript
复制
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行是这段代码中倒数第三行。

我猜它认为它已经结束了(可能是一个EOF字符?)。

你知道这个文件出了什么问题吗?

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

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

更新3:从dpaste粘贴回来似乎解决了这个问题。但是,我对此无能为力,因为解析之前的文件是从FTP服务器下载的。这是我用来从ftp下载的代码:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2014-10-09 16:57:56

我不能在提供的数据上重现这个问题。然而,作为猜测,也许它与缓冲有关?然后,尝试:

代码语言:javascript
复制
sys.stdout.flush()

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

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

票数 0
EN

Stack Overflow用户

发布于 2014-10-09 18:14:02

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26274057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档