2016-12-14 3 views
1

Использование Pycharm для написания скрипта python для загрузки и форматирования файла с фиксированной шириной. Я получаю разные результаты при запуске скрипта в терминале (внутри Pycharm или локально) и при использовании опции run в Пихарме. Любая причина, почему это так, и что правильно?pycharm terminal и run дают разные результаты

with open('uk_dcl_mrg.txt', 'rb') as f: 
ct = 0 
for line in f: 
    ct += 1 

    #### OUTOUT #### 
    for i in layout: ## Loop to create dictionary 
     headerdict[i[0]] = line[i[1]:i[2]] 


    if (headerdict['CORP-STATUS-IND'] == "\x9f"): 
     headerdict['CORP-STATUS-IND'] = '0' 

    elif headerdict['CORP-STATUS-IND'] == '?': 
     headerdict['CORP-STATUS-IND'] = '1' 

    else: 
     headerdict['CORP-STATUS-IND'] = '2' 


    print(headerdict) 

    if ct >= 6: 
     break 

Выход в Терминале

'CORP-STATUS-IND': '0', 

Выход в опции пробега PyCharm

'CORP-STATUS-IND': '2', 

терминал вывода является то, что я ожидал.

+0

глупый вопрос: вы абсолютно уверены, что открываете тот же входной файл? поскольку вы не можете запускать его из одного и того же текущего каталога. и открытие файла в двоичном режиме и чтение его по строке возвращает 'bytes' объекты в python 3, а не' str' –

+0

Определенно тот же файл, что и все его, запущенные из PyCharm, и существует только одна версия файла. Благодарю. – Leigh

ответ

1

Я обычно не отвечает, когда я не уверен, но здесь я довольно уверен:

Вы, вероятно, работает 2 различных версий интерпретатора. Python 2 в вашей консоли и Python 3 в PyCharm.

Подтвердите его, вставив следующую строку в скрипте:

print(sys.version) 

Проблема эта линия:

with open('uk_dcl_mrg.txt', 'rb') as f: 

, поскольку вы открываете файл в двоичном виде, в Python 3, строки являются двоичными, а не строковыми, поэтому сравнение их со строкой всегда терпит неудачу.

>>> b'\x9f'=='\x9f' 
False 
>>> b'\x9f'[0] 
159 
>>> '\x9f'[0] 
'\x9f' 

В Python 2, строки имеют str типа независимо от открытия файла режима, который объясняет, что он работает.

Исправьте код так:

with open('uk_dcl_mrg.txt', 'r') as f: 

Он будет работать для всех версий питона. Но я рекомендую вам отказаться от Python 2, если вы не привязаны к нему, и установите Python 3 по умолчанию.

+0

Это правильно, спасибо. У меня установлены v2 и v3, но по какой-то причине он переключился на v2 – Leigh

-1

Честно говоря, я бы просто придерживался терминала. Проблема с IDE заключается в том, что иногда они не интерпретируют код напрямую и/или через официальный «интерпретатор python». Кроме того, существует так много настроек и других аргументов, которые можно запускать рядом с вашим кодом, который теоретически мог бы редактировать результаты. Кроме того, ваш интерпретатор все равно может интерпретироваться через более старую версию python. Теперь, если быть честным с вами, большая часть этого маловероятна, но это единственная правдоподобная причина, которую я вижу. Лично я бы рекомендовал просто использовать что-то вроде nano в терминале для кода (вот что я делаю), а затем просто запускаю ваш код прямо с терминала. Но, если вам все еще нравится IDE, возможно, просто используйте IDE для подсветки синтаксиса, но все-таки запустите свой код с терминала?

+0

Спасибо. Сделаю. – Leigh

+0

Все эти вещи поддаются проверке, отвечают и фиксируются для предоставленной IDE. Это не ответ и не очень хороший совет по загрузке. – pvg

+0

@pvg: Я отметил это сообщение (был отклонен). Ты прав. Догадка была хороша, но это не ответ, а остальное - в основном на основе мнения. Я поддержал это, но это было немного быстро. –

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