2015-11-06 4 views
0

Я использую скрипт Python для получения некоторого текста из Интернета и помещаю его в качестве комментариев к другому сценарию Python, который создается первым. Первоначально я просто использовал open(), чтобы открыть новый скрипт Python и write() для печати.Невозможно выполнить автогенерированный скрипт Python, закодированный в UTF8-sig

outputFile = open(fileName, 'w') 
outputFile.write('#!/usr/bin/python\n') 
outputFile.write('\n') 
outputFile.write('# ' + lineFromTheInternet + '\n') 
outputFile.write('print \'Hello, World!\'\n') 

Это работает большую часть времени, создается новый сценарий, и я могу запустить его. Однако иногда текст, который я беру из Интернета, имеет символы Юникода и дает мне проблемы (UnicodeEncodeError: 'ascii' codec can't encode character u'\xd7' in position 55: ordinal not in range(128)). Я заменил код затем:

outputFile = codecs.open(fileName, 'w', 'utf-8-sig) 
outputFile.write('#!/usr/bin/python\n') 
outputFile.write('\n') 
outputFile.write('# ' + lineFromTheInternet + '\n') 
outputFile.write('print \'Hello, World!\'\n') 

И это было бы правильно создать файл, но когда я пытаюсь выполнить его я получаю ./autogenerated.py: line 1: #!/usr/bin/python: No such file or directory

Это должно быть кодирование, так как это единственное изменение, но я не знаю, как это решить.

+0

Вы не получили сообщение об ошибке, используя python3, может быть, это вариант для вас? –

ответ

2

Linux или Windows? Это работает в Windows. Убедитесь в том, чтобы писать строки Unicode в файл, открытый с codecs.open:

#!/usr/bin/python2 
import codecs 
with codecs.open('y.py', 'w', 'utf-8-sig') as outputFile: 
    outputFile.write(u'#!/usr/bin/python2\n') 
    outputFile.write(u'\n') 
    outputFile.write(u'# ' + u'Syst\xe9m' + u'\n') 
    outputFile.write(u'print \'Hello, World!\'\n') 

AFAIK, Linux может не понравиться UTF-8 BOM. Попробуйте удалить его и вместо этого объявить кодировку, например. #coding:utf8 наверху файла:

#!/usr/bin/python2 
import codecs 
with codecs.open('y.py', 'w', 'utf8') as outputFile: 
    outputFile.write(u'#!/usr/bin/python2\n') 
    outputFile.write(u'#coding:utf8\n') 
    outputFile.write(u'\n') 
    outputFile.write(u'# ' + u'Syst\xe9m' + u'\n') 
    outputFile.write(u'print \'Hello, World!\'\n') 
+0

Linux. Я попробую написать строки Unicode и дам вам знать, спасибо! – user2891462

Смежные вопросы