找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2541|回复: 1

[求助] 有谁知道python的编码究竟是怎么回事?以下程序哪里不对?

1

主题

1

帖子

1

积分

贫民

积分
1
reveen 发表于 2019-7-27 08:13:34 | 显示全部楼层 |阅读模式
通过以下代码批量更改文件名和文件内容,程序错误在for each_line in f(如下代码的加粗的代码): UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 131: illegal multibyte sequence   我使用的是spyder
需要修改的文件是:32019072200302_(ns08)拼接结果.seq  等(见附件)。程序目的使(ns08)括号中的ns08成为新的文件名,并且替换掉文件开头两行的 Created: Wednesday, July 24, 2019 09:04 AM \n ^^ ,使其变为>ns08, 大于号加文件名.   注:.seq文件可用记事本打开,该文件是生工DNA测序文件。



import os
def right_file_list():  #确定所需文件
       file_name_list=os.listdir()
       for i in file_name_list:
              c=i.split('.')
              if 'py' in c:
                     file_name_list.remove(i) #将同文件夹下的本程序(.py)去掉,只留下.seq文件名写入列表
       return file_name_list
def replace_file_name(file_name_list):    #文件名替换
       for each in file_name_list:
              new_name1=each.split('(')
              new_name2=new_name1[1].split(')')
              final_name=new_name2[0]+'.seq'
              os.rename(each,final_name)
       return os.listdir()
      
def modi_text(file_name_list):  #修改文本内容
       for file_name in file_name_list:
              with open(file_name,'r+') as f:
                     listh=[]
                     for each_line in f:
                            listh.append(each_line)
                     text='>'+file_name.split('.')[0]+'\n'+listh[2]
                     f.truncate(0) #删除内容
                     f.seek(0) #文件指针指向头部
                     f.write(text)  #

file_name_list=replace_file_name(right_file_list())
modi_text(file_name_list)


我有四个问题:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 131: illegal multibyte sequence

1. byte 0xae 是什么意思?
2.position 131 在哪里? python position 规则是什么?
3.什么是illegal multibyte sequence?
4.此例中的UnicodeDecodeError会导致文本内容发生变化,与原来文本内容不同(本例中指.seq文件第三段 ATGC碱基序列)吗?
如果你愿意的话,你甚至可以给我写一段更简单、实用的代码


请各位网友不吝赐教


32019070300460_(b3)拼接结果.seq

759 Bytes, 下载次数: 1

32019070300420_(w61r)拼接结果.seq

766 Bytes, 下载次数: 0

32019070300415_(w21)拼接结果.seq

760 Bytes, 下载次数: 0

回复

使用道具 举报

0

主题

4

帖子

4

积分

贫民

积分
4
alex_zen 发表于 2019-7-29 14:28:30 | 显示全部楼层
本帖最后由 alex_zen 于 2019-7-29 14:29 编辑

使用open 打开文本文件时需要注意,默认会使用操作系统的默认编码来打开文件,中文windows是gbk.因此如果你的文件是utf-8,open时就需要指定encoding='utf-8'
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表