TypeError: принуждение к Unicode: нужна строка или буфер
Этот код возвращает следующее сообщение об ошибке:
-
с открытым (infile, mode = 'r', buffering = -1) как in_f, open (outfile, mode = 'w', buffering = -1) как out_f:
TypeError: принуждение к Unicode: нужна строка или буфер, найденный файл
# 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')
Пожалуйста, помогите мне.
Ответы
Ответ 1
Вы пытаетесь открыть каждый файл дважды! Сначала вы выполните:
infile=open('110331_HS1A_1_rtTA.result','r')
а затем снова передайте infile
(который является файловым объектом) функции open
:
with open (infile, mode='r', buffering=-1)
open
, конечно, ожидает, что его первым аргументом будет имя файла, а не открытый файл!
Откройте файл только один раз, и все будет в порядке.
Ответ 2
Вы пытаетесь передать файловые объекты в имена файлов. Попробуйте использовать
infile = '110331_HS1A_1_rtTA.result'
outfile = '2.txt'
в верхней части кода.
(Не только удвоенное использование open()
вызывает эту проблему при попытке открыть файл снова, это также означает, что infile
и outfile
никогда не закрываются во время выполнения, хотя они, вероятно, будут закрываться после завершения программы.)
Ответ 3
Для менее конкретного случая (а не только кода в вопросе - поскольку это один из первых результатов в Google для этого общего сообщения об ошибке. Эта ошибка также возникает при запуске определенной команды os с аргументом None.
Например:
os.path.exists(arg)
os.stat(arg)
Поднимет это исключение, если arg - None.