2017-08-24 83 views
0

我想從python2遷移到python3。 在代碼中,它像這樣以二進制模式打開一個文件。使用TypeError從Python2遷移到Python 3.6.2

f = open('test', 'rb+') 

因爲它需要這樣的文件查找。

f.seek(-26, 1) 

而且,代碼將格式化的字符串寫入文件。

f.writelines("%20s,%04d\n" % (varStr, varInt)) 
f.writelines('{0:>20s},{1:04d}\n'.format(varStr, varInt)) 

上面的代碼是原始代碼,下面的代碼是我編輯的。 但是,當我運行代碼時,出現錯誤。

TypeError: a bytes like object is required, not 'int'

請幫助我從這個地獄。

+0

創建[MCVE。包括指示故障線路的完整回溯。 –

回答

0

有兩種錯誤:

  1. 你需要編碼的串以二進制方式打開文件時(改變它們以字節爲單位)
  2. writelines必須以列表,而不是單個項目中使用(該函數最後有's')。你的情況,你可以用 '寫'

也許這樣的事情會工作:

f.write(("%20s,%04d\n" % (varStr, varInt)).encode()) 
f.write(('{0:>20s},{1:04d}\n'.format(varStr, varInt)).encode()) 
+0

非常感謝。我解決了這個問題。 f.writelines(['{0:> 20s},{1:04d} \ n'.format(varStr,varInt).encode()]) – HoYa