Skip to main content
 首页 » 编程设计

python之尝试下载 gzip 文件时出现 urlopen 问题

2025年05月04日18EasonJim

我将使用维基词典转储来进行 POS 标记。不知何故,它在下载时卡住了。这是我的代码:

import nltk 
from urllib import urlopen 
from collections import Counter 
import gzip 
 
url = 'http://dumps.wikimedia.org/enwiktionary/latest/enwiktionary-latest-all-titles-in-ns0.gz' 
fStream = gzip.open(urlopen(url).read(), 'rb') 
dictFile = fStream.read() 
fStream.close() 
 
text = nltk.Text(word.lower() for word in dictFile()) 
tokens = nltk.word_tokenize(text) 

这是我得到的错误:

Traceback (most recent call last): 
File "~/dir1/dir1/wikt.py", line 15, in <module> 
fStream = gzip.open(urlopen(url).read(), 'rb') 
File "/usr/lib/python2.7/gzip.py", line 34, in open 
return GzipFile(filename, mode, compresslevel) 
File "/usr/lib/python2.7/gzip.py", line 89, in __init__ 
fileobj = self.myfileobj = __builtin__.open(filename, mode or 'rb') 
TypeError: file() argument 1 must be encoded string without NULL bytes, not str 
Process finished with exit code 1 

请您参考如下方法:

您正在将下载的数据传递给gzip.open(),它期望传递的是文件名。

代码然后尝试打开一个以 gzip 数据命名的文件名,但失败了。

要么将 URL 数据保存到一个文件,然后在 that 上使用 gzip.open(),要么使用 zlib 解压缩 gzip 数据> 模块代替。 “保存”数据就像使用 StringIO.StringIO() 内存文件对象一样简单:

from StringIO import StringIO 
from urllib import urlopen 
import gzip 
 
 
url = 'http://dumps.wikimedia.org/enwiktionary/latest/enwiktionary-latest-all-titles-in-ns0.gz' 
inmemory = StringIO(urlopen(url).read()) 
fStream = gzip.GzipFile(fileobj=inmemory, mode='rb')