Python在简单文件读取和打印时冻结

时间:2015-07-13 16:39:15

标签: python windows windows-server-2012

我遇到了一个非常简单的代码问题。我有一个6551行(ASCII)的文件,所有我设法做的就是读取文件并打印出来。

a_file = open(myfile_path).readlines()
print a_file

在尝试打印时,翻译完全卡住了几分钟。 我已经在空闲和jetbrains pycharm尝试过这个。即时通讯运行Windows Server 2012作为我的工作站和Windows 7在家 - 有趣的是,这在较弱的Windows 7机器回家(q9550和8gb ram)完美工作 - 但我不能(也没有它的人)找到一个在我的工作站上解决这个问题(i99 on x99,64gb ram,gtx980)。

会感激所有和任何帮助。

2 个答案:

答案 0 :(得分:3)

将文件读取到内存(这就是你所做的)并不是一个好主意,因为你可能遇到遇到的问题。

如果要打印文件的每一行,可以使用以下结构:

with open(myfile_path) as input_file:
    for line in input_file:
        print line

对于更复杂的操作,您(或IT人员)应该更好地解决the documentation for open() method和文件操作。

答案 1 :(得分:0)

首先,试试这个:

import sys

with open(myfile_path) as f:
    for line in f:
        print f
        sys.stdout.flush()

可能是导致脚本挂起的一些因素,例如文件被打开或被锁定或输出阻塞。这将导致所有可以打印的内容打印出来。

此外,通常一次做一行是有益的,除非你实际上需要同时在列表中的所有行这不应该是根本原因除非行长度真的很大但它的风格很好不分配巨大的数据结构。

此外,在文件上设置非阻塞模式将解决诸如写入和锁定文件之类的问题(尽管此不会为您提供稳定的解决方案,但它会停止阻止在读取而不是)。这取决于操作系统,可能不会对你造成太大伤害。

如果问题是文件正在被写入(我在Windows中经常遇到这个问题),另一种选择是将正在写入的文件复制到临时文件中并将该副本交给脚本。 / p>

您选择做什么将在很大程度上取决于您是否希望确保所有数据都可用,或者是否要确保脚本立即运行。