TypeError:强制为Unicode:需要string或缓冲区
此代码返回以下错误消息:
-
在out_f中打开(infile,mode ='r',buffering = -1)in_f,open(outfile,mode ='w',buffering = -1)TypeError:强制为Unicode:需要string或缓冲区,find文件
# Opens each file to read/modify infile=open('110331_HS1A_1_rtTA.result','r') outfile=open('2.txt','w') import re with open (infile, mode='r', buffering=-1) as in_f, open (outfile, mode='w', buffering=-1) as out_f: f = (i for i in in_f if i.rstrip()) for line in f: _, k = line.split('\t',1) x = re.findall(r'^1..100\t([+-])chr(\d+):(\d+)\.\.(\d+).+$',k) if not x: continue out_f.write(' '.join(x[0]) + '\n')
请有人帮助我..我不是一个开发,但我需要这个为我的研究工作..感谢一大堆读者和开发人员!
你正试图打开每个文件两次! 首先你做:
infile=open('110331_HS1A_1_rtTA.result','r')
然后将infile
(这是一个文件对象)再次传递给open
函数:
with open (infile, mode='r', buffering=-1)
open
当然期待它的第一个参数是一个文件名,而不是一个打开的文件!
只打开一次文件,你应该没问题。
您正尝试将文件对象作为文件名传递。 尝试使用
infile = '110331_HS1A_1_rtTA.result' outfile = '2.txt'
在你的代码的顶部。
(不仅open()
的加倍使用导致这个问题再次打开文件,这也意味着infile
和outfile
在执行过程中永远不会closures,尽pipe一旦程序结束它们可能会被closures。 )
对于不那么具体的情况(不只是代码在这个问题 – 因为这是谷歌这一般的错误信息的第一个结果之一。
例如:
os.path.exists(arg) os.stat(arg)
当arg是None时会引发这个exception。