我正在尝试使用freebase数据转储,但是我发现使用python读取文件时遇到了一些问题。看起来我的程序无法阅读所有内容。
def test2():
count=0
for line in open(FREEBASE_TOPIC):
count+=1
return count
def test3():
count=0
for line in open(FREEBASE_QUAD):
count+=1
return count
if __name__ == "__main__":
print "FREEBASE TOPIC - NR LINES:",test2()
print "FREEBASE QUAD - NR LINES:",test3()
结果如下:
FREEBASE TOPIC - ITR TIME: 1.21000003815
FREEBASE TOPIC - NR LINES: 1643010
FREEBASE QUAD - ITER TIME: 0.797000169754
FREEBASE QUAD - NR LINES: 3155131
这可以是全部。它看起来很少包含整个freebase。我无法看到如何在2秒内迭代一个33GB文件和另一个5GB文件。
有什么问题?我正在下载文件,以防下载过程中出现问题,但我的连接需要几十年的时间,所以我在平均时间问。文件大小是正确的,我打印了一些行,看起来是正确的。
答案 0 :(得分:2)
我遇到了一个问题:
open('file', 'rb')
应该解决它。
chr(26)
有时会导致文件模式“r”的文件结尾为默认值。
答案 1 :(得分:2)
听起来您在使用它们之前解压缩文件。在访问文件时,你几乎肯定最好保持文件压缩和解压缩。
from bz2 import BZ2File
for line in BZ2File('freebase-datadump-quadruples-<date>.tsv.bz2','rU'):
<process a line>
答案 2 :(得分:0)
您的脚本运行正常,并在Ubuntu上为我生成正确的行数。这可能是您操作系统的限制吗?
Parsing large (20GB) text file with python - reading in 2 lines as 1