嘿,我写这封信是因为遇到一个无法追踪自己的问题。
我正在尝试从一个巨大的csv文件(27.3 GB)中加载一些数据,该文件可以在https://github.com/several27/FakeNewsCorpus处找到,但是每次我尝试运行以下代码时,都会得到一个KeyError'content'在行116454上。据我了解,这应该是因为在obj变量中未设置“内容”字段,但应在其中设置。故障发生的位置与每次运行都一致。
它不仅在此行失败,而且只是失败的第一行。由于单词的长度不为零,因此它可以在其他行上正常工作。我试图将csv字段的最大大小更改为2000000000,因为这也是一个问题。我正在木星笔记本上运行它,“ count”变量仅用于跟踪错误。
Codesnip
def get_words(text) :
regex = re.compile(r"\w+\'\w+|\w+|\,|\.")
return set(re.findall(regex, text))
words = set()
count = 0
with open(source, 'r', encoding='utf-8', newline= '') as articles:
reader = csv.reader(articles)
hds = next(reader, None)
print(hds)
for row in reader:
obj = {}
for hd, val in zip(hds, row):
obj[hd] = val
ws, _ = find_urls(lowercase(obj['content'])) <- error here
ws = get_words(ws)
words = words | ws
count = count + 1
try:
words.remove('URL')
except:
pass
find_url和小写字母功能仅将字符串作为输入并返回更改后的字符串。他们已经过测试。
我也在配备i7英特尔CPU和16 GB内存的华硕笔记本电脑上运行此程序,这也值得一提。 csv文件所在的硬盘驱动器是三星SSD,而且它不到一年的历史,因此它上面应该还没有任何故障页面。 csv文件包含文章,并且content字段绝不能为空,因为这与说文章不包含内容相同。
答案 0 :(得分:0)
这是一个黑暗的刺探,没有看到您的数据(尤其是臭名昭著的#116454周围的行),但是zip()
一旦其中一个迭代器用完就停止。尝试
from itertools import zip_longest
并替换行
for hd, val in zip(hds, row):
obj[hd] = val
与
for hd, val in zip_longest(hds, row, fillvalue=''):
obj[hd] = val
看看会发生什么。另外,请阅读docs。