文件中的8亿字节和20681行意味着平均行大小超过38千字节。你确定吗?你预计每行有多少个数字?你怎么知道你有20681行?该文件是800 Mb?
61722行几乎是完全的3倍20681 - 是任何意义数3例如每条记录的3个逻辑子部分?
要了解您文件中的真实含义,请不要依赖它的外观。 Python的repr()
函数是你的朋友。
你在Windows?即使不,总是open(filename, 'rb')
。
如果这些字段是制表符分隔的,那么不要把delimeter=" "
(不管是引号之间的任何内容都不是制表符)。把delimiter="\t"
。
尝试把一些调试语句,在代码中,像这样的:
DEBUG = True
f = open('v2-host_tfdf_en.txt', 'rb')
if DEBUG:
rawdata = f.read(200)
f.seek(0)
print 'rawdata', repr(rawdata)
# what is the delimiter between fields? between rows?
tfdf_Reader = csv.reader(f,delimiter=' ')
c = 0
for row in tfdf_Reader:
c = c + 1
if DEBUG and c <= 10:
print "row", c, repr(row)
# Are you getting rows like you expect?
print "rowcount", c
注意:如果你正在Error: field larger than field limit (131072)
,这意味着你的文件有没有分隔符的数据为128Kb。
我会怀疑:
(一)你的文件有随机的垃圾或apppended它二进制0的一大块 - 这应该是显而易见的十六进制编辑器;它也应该在TEXT编辑器中显而易见。打印您所做的所有行,以帮助确定故障发生的位置。
或(b)分隔符是一个或多个空格字符(空格,制表符)的字符串,前几行有制表符,其余行有空格。如果是的话,这应该是一个十六进制编辑器明显(或记事本+ +,特别是如果你做View/Show Symbol/Show all characters
)。如果是这种情况,你不能使用csv
,你需要一些简单的东西:
f = open('v2-host_tfdf_en.txt', 'r') # NOT 'rb'
rows = [line.split() for line in f]
hello hello ...如果你已经解决了你的问题,接受一个答案或写你自己的答案并接受它 - 否则你需要提供更多的信息,以便我们可以帮助你。 – 2010-06-18 00:40:31
嗨,对不起,迟到的回复。问题是,它被保存在Unix格式。所以我没有选择安装Ubuntu并丢弃窗户。 Noe一切都很好。我使用vim,看到长行导致了这个问题 顺便说一句,感谢您的调试代码,它帮助了我很多。我选择它作为答案,如果有人有同样的问题可以使用它。 – Hossein 2010-06-18 15:04:39
“问题在于它是以Unix格式保存的,所以我没有选择安装Ubuntu并丢掉Windows。” - “以Unix格式保存”不应该成为Python的问题;今后,在采取这种激烈行动之前,请考虑描述您的问题并寻求更多帮助。 – 2010-06-18 22:12:52