Python读取txt返回列表元素带单引号 写入时无该引号如何解决
问题原因
你看到的单引号分两种情况,先做个简单测试就能定位:
执行代码print(repr(list[0]))查看读取到的第一个元素的原始表示:
- 如果输出没有额外包裹的单引号:说明你打印列表时看到的单引号是Python展示列表字符串元素的默认格式,不是内容本身,不需要去除,对比失败和这个无关
- 如果输出确实自带首尾单引号:说明你写入文件的时候逻辑错误,把非字符串类型的元素直接转成了字符串写入,单引号是
str()转换时自带的内容
修复方案
1. 修正写入逻辑
你当前的写入方法直接调用str(each),如果current_videos的元素是存储标题和链接的元组,str()会自动给元组内的字符串元素加上单引号写入文件。修改为按你约定的「标题%链接」格式手动拼接写入:
def filewriter(filename, filetowrite): # 统一指定utf-8编码避免乱码 with open(filename, "w", encoding="utf-8") as file: for title, url in filetowrite: # 按分隔符拼接成纯字符串,避免str()转换引入多余符号 file.write(f"{title}%{url}\n")
2. 修正读取逻辑
读取时按照分隔符拆分,还原成和current_videos完全一致的元组格式,保证对比时类型匹配:
def filereader(filename): old_videos = [] with open(filename, "r", encoding="utf-8") as file: for line in file: line = line.strip() # 跳过空行 if not line: continue # 只分割1次,避免标题内包含%导致拆分错误 title, url = line.split("%", 1) old_videos.append( (title, url) ) return old_videos
3. 列表对比示例
两个列表的元素格式完全统一后,直接用集合差集就能快速找出新增内容:
# 新旧列表都转成集合,直接求差集得到新增视频 old_set = set(filereader("videos.txt")) current_set = set(current_videos) new_videos = current_set - old_set # 新增视频推送逻辑写在这里 # 最后把最新的current_videos写入文件覆盖旧内容 filewriter("videos.txt", current_videos)
内容的提问来源于stack exchange,提问作者TwizzleBizzle
相关产品推荐
相关产品推荐

