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()的加倍使用导致这个问题再次打开文件,这也意味着infileoutfile在执行过程中永远不会closures,尽pipe一旦程序结束它们可能会被closures。 )

对于不那么具体的情况(不只是代码在这个问题 – 因为这是谷歌这一般的错误信息的第一个结果之一。

例如:

 os.path.exists(arg) os.stat(arg) 

当arg是None时会引发这个exception。