文件中的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