使用Pycharm编写用于加载和格式化固定宽度文件的python脚本当我在终端(在Pycharm内或本地)运行脚本以及在Pycharm中使用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 :(得分:1)
当我不确定时,我通常不会回答,但在这里我很确定:
您可能正在运行2种不同的解释器版本。控制台中的Python 2和PyCharm中的Python 3。
通过在脚本中插入以下行来确认:
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。但我建议你删除Python 2,除非你绑定它并默认安装Python 3。
答案 1 :(得分:-1)
老实说,我只是坚持终端。 IDE的问题在于有时不直接解释代码,和/或通过官方的“python解释器”。此外,有许多设置和其他参数可以与您的代码一起运行,理论上可以编辑结果。此外,您的翻译仍然可以通过旧版本的python进行解释。现在,老实说,大多数情况不太可能,但这是我看到的唯一可信的原因。就个人而言,我建议在终端中使用像nano这样的东西进行编码(这就是我的工作),然后直接从终端运行代码。但是,如果您仍然喜欢IDE,那么可能只是使用IDE进行语法高亮显示,但仍然可以从终端运行代码?