Python 读取.txt 首行去除 \ufeff

本文介绍在使用Python读取UTF-8编码的文本文件时遇到的ufeff字符问题,并提供了解决方案,即通过更改编码方式为UTF-8-sig来避免该问题。
部署运行你感兴趣的模型镜像

Python 读取.txt 首行去除 \ufeff

语言:python
编程工具:Visual Studio Code

读取文件过程中发现一个问题:已有记事本文件(非空),转码 UTF-8,复制到VS Code中,在开始位置打印结果会出现 \ufeff, 打印代码如下
在这里插入图片描述

运行结果如下:第一行有个\ufeff
在这里插入图片描述

解决方法:只需改一下编码就行,把 UTF-8 编码 改成 UTF-8-sig
file1 = open(‘scores.txt’,‘r’,encoding=‘utf-8-sig’)

在这里插入图片描述

运行结果在这里插入图片描述

参考文章:https://www.cnblogs.com/chongzi1990/p/8694883.html

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

[2025-11-09 13:07:06] 错误: 读取CSV失败: '学号' 这段代码有什么问题: import csv import os from datetime import datetime # 异常日志记录函数 def log_error(error_msg): """将异常信息写入log.txt""" with open("log.txt", "a", encoding="utf-8") as f: time_str = datetime.now().strftime("%Y-%m-%d %H:%M:%S") f.write(f"[{time_str}] 错误: {error_msg}\n") class Student: def __init__(self, student_id, name, python, database, os_score): self.student_id = student_id self.name = name self.python = int(python) self.database = int(database) self.os_score = int(os_score) self.avg_score = self.calculate_avg() # 计算个人平均分 def calculate_avg(self): """计算个人平均成绩""" return (self.python + self.database + self.os_score) / 3 # 重写"-"运算符,用于对象间平均分比较(支持排序) def __sub__(self, other): return self.avg_score - other.avg_score class ScoreManager: def __init__(self, file_path): self.file_path = file_path self.students = [] # 存储Student对象列表 self.class_avg = {} # 存储全班各科及平均分的平均值 def read_csv(self): """读取CSV文件并生成Student对象""" try: with open(self.file_path, "r", encoding="utf-8") as f: reader = csv.DictReader(f) for row in reader: # 从CSV行数据初始化Student对象 stu = Student( student_id=row["学号"], name=row["姓名"], python=row["Python"], database=row["数据库"], operating_system=row["操作系统"] ) self.students.append(stu) except Exception as e: log_error(f"读取CSV失败: {str(e)}") raise def sort_students(self): """按平均分排序(利用重写的"-"运算符)""" # 冒泡排序示例(通过对象相减比较大小) n = len(self.students) for i in range(n): for j in range(0, n-i-1): if self.students[j] - self.students[j+1] > 0: self.students[j], self.students[j+1] = self.students[j+1], self.students[j] def calculate_class_avg(self): """计算全班各科及平均分的平均值""" if not self.students: self.class_avg = {"Python": 0, "数据库": 0, "操作系统": 0, "平均成绩": 0} return # 累加各科成绩和个人平均分 sum_python = sum(stu.python for stu in self.students) sum_db = sum(stu.database for stu in self.students) sum_os = sum(stu.os_score for stu in self.students) sum_avg = sum(stu.avg_score for stu in self.students) count = len(self.students) self.class_avg = { "Python": sum_python / count, "数据库": sum_db / count, "操作系统": sum_os / count, "平均成绩": sum_avg / count } def write_result(self): """将排序后的成绩和全班平均分写入最终成绩.csv""" output_dir = os.path.join(os.path.dirname(self.file_path), "成绩") output_path = os.path.join(output_dir, "最终成绩.csv") try: # 创建"成绩"文件夹(如果不存在) os.makedirs(output_dir, exist_ok=True) with open(output_path, "w", encoding="utf-8", newline="") as f: fieldnames = ["学号", "姓名", "Python", "数据库", "操作系统", "平均成绩"] writer = csv.DictWriter(f, fieldnames=fieldnames) # 写入表 writer.writeheader() # 写入每个学生的信息 for stu in self.students: writer.writerow({ "学号": stu.student_id, "姓名": stu.name, "Python": stu.python, "数据库": stu.database, "操作系统": stu.os_score, "平均成绩": round(stu.avg_score, 2) # 保留2位小数 }) # 写入全班平均分 writer.writerow({ "学号": "平均成绩", "姓名": "", "Python": round(self.class_avg["Python"], 2), "数据库": round(self.class_avg["数据库"], 2), "操作系统": round(self.class_avg["操作系统"], 2), "平均成绩": round(self.class_avg["平均成绩"], 2) }) except Exception as e: log_error(f"写入结果失败: {str(e)}") raise # 主程序执行 if __name__ == "__main__": try: # 初始化ScoreManager(文件路径为D:\Python\期末成绩.csv) manager = ScoreManager(r"D:\Python\期末成绩.csv") manager.read_csv() # 读取CSV并生成Student对象 manager.sort_students() # 按平均分排序 manager.calculate_class_avg() # 计算全班平均分 manager.write_result() # 写入结果 print("操作完成,结果已写入'成绩/最终成绩.csv'") except Exception as e: print(f"程序执行失败,请查看log.txt获取详情")
最新发布
11-10
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值