You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向TXT文件追加内容失败:读写同一文件时无法写入分词结果

问题分析与解决

你遇到的问题是:用r+模式读写2289newsML.txt时,能正常打印分词后的内容,但无法将其写入文件。先看看你的原代码片段:

from pathlib import Path
from nltk.tokenize import word_tokenize
news_folder = Path("file\\path\\")
news_file = (news_folder / "2289newsML.txt")
f = open(news_file, 'r+')
data = f.readlines()
# 这里应该有分词处理的代码,比如:
tokenized_data = []
for line in data:
    tokens = word_tokenize(line.strip())
    tokenized_data.append(' '.join(tokens))
print(tokenized_data)  # 能正常打印,但写入没效果
# 假设你这里有写入代码,比如f.write('\n'.join(tokenized_data))

为什么写入没效果?

主要是r+模式的特性导致的:

  • 用r+打开文件后,调用readlines()会把文件指针移到文件末尾,此时直接写入的话,内容会追加到原文件后面,但这不符合你“仅保存分词版本”的需求。
  • 另外,如果没有手动调用f.close()或者f.flush(),操作系统可能不会立即把内存中的内容写入磁盘,看起来就像没写入一样。

两种可行的解决方案

方案1:分开读写(更安全推荐)

先读取文件内容,关闭文件后,再用w模式打开写入,这样能避免读写指针混乱的问题:

from pathlib import Path
from nltk.tokenize import word_tokenize

news_folder = Path("file\\path\\")
news_file = news_folder / "2289newsML.txt"

# 第一步:读取并处理内容
with open(news_file, 'r', encoding='utf-8') as f:
    data = f.readlines()

tokenized_lines = []
for line in data:
    # 去掉首尾空白后分词,再用空格拼接成字符串
    tokens = word_tokenize(line.strip())
    tokenized_lines.append(' '.join(tokens))

# 第二步:写入处理后的内容(覆盖原文件)
with open(news_file, 'w', encoding='utf-8') as f:
    f.write('\n'.join(tokenized_lines))

用with语句的好处是会自动关闭文件,不用手动调用close(),避免资源泄漏。

方案2:同一文件内操作(需注意指针位置)

如果一定要在同一个文件句柄里完成读写,需要手动移动指针并截断原内容:

from pathlib import Path
from nltk.tokenize import word_tokenize

news_folder = Path("file\\path\\")
news_file = news_folder / "2289newsML.txt"

with open(news_file, 'r+', encoding='utf-8') as f:
    # 读取内容
    data = f.readlines()
    # 处理分词
    tokenized_lines = []
    for line in data:
        tokens = word_tokenize(line.strip())
        tokenized_lines.append(' '.join(tokens))
    # 把指针移回文件开头
    f.seek(0)
    # 截断文件(删除原内容)
    f.truncate()
    # 写入分词后的内容
    f.write('\n'.join(tokenized_lines))

这样处理后,文件里就只会保存分词后的版本啦。

内容的提问来源于stack exchange,提问作者The BrownBatman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:34:25