Python收集txt数据报OSError: [Errno 63]文件名过长错误如何解决
报错原因与修复方案
核心报错原因
OSError: [Errno 63] File name too long触发的直接问题出在longest_words函数:你调用该函数时传入的是已经读取完成的完整文本字符串,但函数内部仍然调用open(textdict)尝试把传入的内容当文件路径打开,整个文本的长度远超过系统允许的最大文件名长度,因此触发报错。
其他需要修复的代码问题
- 重复定义3次同名
cleanandtokenize函数,后定义的会覆盖之前的逻辑,不需要为每个文本单独写处理函数,只需保留1个通用版本即可 - 字符串转小写调用漏了括号:
textlower = moonstone.lower需改为textlower = moonstone.lower(),否则获取的是方法对象而非转小写后的字符串 - 第一个
cleanandtokenize函数返回的token_moonstone未定义,属于变量名错误 - 缺少
import re、import nltk导入语句,运行会报名称未定义错误 split('')写法非法,Python不允许空字符串作为分隔符,会触发ValueError- 你已提前把所有文本读取到内存中,
longest_words无需再执行打开文件的操作
修正后可运行代码
import re import nltk # 首次运行需要下载punkt分词模型,可取消注释下行 # nltk.download('punkt') # 读取文本 moonstone = open("../150C/The_Moonstone.txt", encoding = "UTF-8").read() TGP = open("../150C/The_Garden_Party_&_Other_Stories.txt", encoding = "UTF-8").read() austen = open("../150C/Austen.txt", encoding = "latin_1").read() # 通用分词清洗函数 def cleanandtokenize(text): textlower = text.lower() textcleaner = re.sub(r'[^\w\s]', '', textlower) tokens = nltk.word_tokenize(textcleaner) return tokens # 提取最长词函数 def longest_words(text): tokens = cleanandtokenize(text) max_len = len(max(tokens, key=len)) return [word for word in tokens if len(word) == max_len] print(f"*The Moonstone*: {longest_words(moonstone)}", f"*The Garden Party and Other Stories*: {longest_words(TGP)}", f"*Jane Austens Works*: {longest_words(austen)}", sep="\n\n")
内容的提问来源于stack exchange,提问作者annalabagaba
相关产品推荐
相关产品推荐

