TypeError: приведение к Unicode: нужна строка или буфер - PullRequest
55 голосов
/ 13 июля 2011

Этот код возвращает следующее сообщение об ошибке:

  • с open (infile, mode = 'r', buffering = -1) в качестве in_f, open (outfile, mode = 'w', buffering = -1) в качестве out_f: Ошибка типа: приведение к 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')
    

Пожалуйста, кто-нибудь, помогите мне.

Ответы [ 3 ]

64 голосов
/ 13 июля 2011

Вы пытаетесь открыть каждый файл дважды!Сначала вы делаете:

infile=open('110331_HS1A_1_rtTA.result','r')

, а затем снова передаете infile (который является файловым объектом) в функцию open:

with open (infile, mode='r', buffering=-1)

open - это, конечно,ожидая, что его первый аргумент будет именем файла, а не открытым файлом!

Откройте файл только один раз, и все будет в порядке.

9 голосов
/ 21 октября 2015

Для менее конкретного случая (не только кода в вопросе - так как это один из первых результатов в Google для этого общего сообщения об ошибке. Эта ошибка также возникает при запуске определенной команды os с аргументом None.

Например:

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

Возникнет это исключение, когда аргумент None.

8 голосов
/ 13 июля 2011

Вы пытаетесь передать файловые объекты как имена файлов.Попробуйте использовать

infile = '110331_HS1A_1_rtTA.result'
outfile = '2.txt'

в верхней части кода.

(Не только двойное использование open() вызывает эту проблему при попытке открыть файл снова, но также означает, чтоinfile и outfile никогда не закрываются во время выполнения, хотя они, вероятно, закроются после завершения программы.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...