如何用Python将文本文件转为指定结构列表并去除多余引号?
解决Python读取带引号逗号分隔文本为列表的问题
看起来你已经接近目标了,但问题出在读取内容的处理方式上——你的代码把整个文件内容当成了单个字符串元素塞进列表,自然会保留所有原始引号,也不会拆分句子。下面给你两种简单的解决办法:
方法1:手动拆分并清理引号
这种方法适合你想完全控制每一步处理的场景:
def read_data(): new_list = [] with open("text.txt", 'r', encoding='utf-8') as f: raw_data = f.read().strip() # 按", "分割成一个个带引号的句子 quoted_sentences = raw_data.split(', ') # 去掉每个句子首尾的双引号 new_list = [sentence.strip('"') for sentence in quoted_sentences] print(new_list) read_data()
步骤说明:
f.read().strip()读取文件内容并去掉首尾的空白字符split(', ')把整个字符串按", "拆分,得到一个个带双引号的句子字符串- 用列表推导式遍历每个句子,用
strip('"')去掉首尾的双引号,得到干净的句子列表
方法2:用ast.literal_eval自动解析(推荐)
你的文件内容格式其实和Python列表的语法几乎一样,只是少了首尾的方括号。用ast.literal_eval可以安全地把字符串直接转换成真正的列表,省去手动处理引号的麻烦:
import ast def read_data(): new_list = [] with open("text.txt", 'r', encoding='utf-8') as f: raw_data = f.read().strip() # 给内容加上方括号,变成合法的Python列表字符串 list_str = f"[{raw_data}]" # 安全解析成Python列表 new_list = ast.literal_eval(list_str) print(new_list) read_data()
为什么推荐这个方法?
ast.literal_eval比普通的eval安全得多,它只会解析Python的字面量(比如列表、字符串、数字等),不会执行任何恶意代码。而且如果你的句子里有特殊字符(比如转义的引号),它也能正确处理,比手动拆分更可靠。
测试一下这两种方法,应该就能得到你想要的["Sentence 1.", "Sentence 2.",..., "Sentence n."]格式啦!
内容的提问来源于stack exchange,提问作者M S
相关产品推荐
相关产品推荐

