|
通过以下代码批量更改文件名和文件内容,程序错误在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碱基序列)吗?
如果你愿意的话,你甚至可以给我写一段更简单、实用的代码
请各位网友不吝赐教
|
|