CSV文件remarks列提取指定中心词及前后词并新增列问题求助
解决CSV文件处理的权限问题与功能实现
一、权限错误的解决思路
原代码中同时以r+和wt模式打开同一个文件,容易因文件句柄未及时释放引发权限冲突。正确做法是先读取文件内容并关闭句柄,处理完成后再重新打开文件写入结果;更推荐用Python内置的csv模块处理CSV,既能避免手动分割逗号带来的格式问题,也能更安全地管理文件读写流程。
二、实现需求的代码重构
以下代码完成从remarks列提取以aaaa为中心的前后各1个词、新增info列的需求,同时解决权限问题:
import csv # 读取并处理CSV内容 processed_data = [] with open('out_test.csv', 'r', encoding='utf-8') as input_file: reader = csv.DictReader(input_file) # 新增info列到表头 updated_headers = reader.fieldnames + ['info'] processed_data.append(updated_headers) for row in reader: remarks_content = row.get('remarks', '') word_list = remarks_content.split() # 按空格分割为词列表 info_value = 'NA' # 查找'aaaa'的位置并提取目标词 for index, word in enumerate(word_list): if word == 'aaaa': # 处理边界情况,避免索引越界 start_pos = max(0, index - 1) end_pos = min(len(word_list), index + 2) # 切片左闭右开,所以+2 target_words = word_list[start_pos:end_pos] info_value = ' '.join(target_words) break # 找到第一个匹配项即停止 row['info'] = info_value # 按表头顺序整理行数据 processed_row = [row[header] for header in updated_headers] processed_data.append(processed_row) # 将处理结果写入文件 with open('out_test.csv', 'w', encoding='utf-8', newline='') as output_file: writer = csv.writer(output_file) writer.writerows(processed_data)
代码说明
- 用
csv.DictReader和csv.writer处理CSV,自动兼容单元格含逗号的场景,避免格式错乱。 - 针对
aaaa在词列表开头/结尾的边界情况,通过max()和min()确保切片不越界,只提取存在的词。 - 先读取并处理所有内容,再统一写入文件,彻底避免文件句柄冲突引发的权限问题。
三、额外调整建议
如果remarks列的词分割规则不是单纯空格(比如包含标点),可以改用正则分割:
import re word_list = re.split(r'\W+', remarks_content) # 按非单词字符分割
内容的提问来源于stack exchange,提问作者Fanatic
相关产品推荐
相关产品推荐

