2017-06-23 6 views
0

ファイルまたは標準入力から読み込む予定だったので、以下のコードを書きました。 Debugがtrueの場合はfileinput(filename)、fileがなければfileinput()でファイルから読み込みます。奇妙なことは、私が 'line'を印刷すると、出力ファイルにうまく印刷されることです。しかし、インデックスから行からcharを取得したり、デバッグブレーク時に行を検査したりすると、正しい入力が "WUBWEWUB"(入力ファイルの内容)のときは "UBWEWUB"のように見えます。Pythonの文字列スライスが期待通りに機能しない

import os 
import sys 
import psutil 
import fileinput 

if __debug__: 
    Debug = True 
    import defs 
else: Debug = False 
if(Debug == True): 
    def memory(): 
     pass 

    inputFilePath = os.path.join(defs.IO_Dir, "input.txt") 
    inf = open(inputFilePath, "r") 
    outf = open(os.path.join(defs.IO_Dir, "output.txt"), "w") 
    logf = open(os.path.join(defs.IO_Dir, "log.txt"), "a") 
    logf.write(f"Program started at : {gettime()}\n") 
    def write(str): 
     print(str, file = outf) 
     pass 
    inval = inputFilePath 
    sys.stdout = outf 
    pass 
else: 
    inval = None 
    pass 
if(Debug): print("Start------------------------") 
for x in fileinput.input(inval): 
    line = x.strip() 
    if(line == "Exit"): 
     break 
    ans = "" 
    i = 0 
    l = 3 
    print(type(line)) 
    print(type(line[0])) 
    for i in range(2, len(line) - 3): 
     if(line[i] == 'W' and line[i+1] == 'U' and line[i+2] == 'B'): 
      if(i + 3 == len(line)): 
       break 
       pass 
      l = i + 3 
      if(ans[-1] != ' '): 
       ans = ans + " " 
      pass 
     elif(i >= l): 
      ans = ans + line[i] 
      pass 
     pass 
    pass 
print(ans) 
print(line) 
if(Debug): print("End------------------------") 

出力ファイルは:

Start------------------------ 
<class 'str'> 
<class 'str'> 
BWE 
WUBWEWUB 
End------------------------ 

私はエンコードの問題としてそれを期待したが、ラインの種類は、単に「str」はあると奇妙な手紙があり、なぜ私は見つけることができません。

+1

ファイルにBOMヘッダーがある可能性があります。それらを16進エディタでチェックしてください。 –

+0

システム上の(テキスト)ファイルに使用されているエンコーディングを知りたいでしょう。入力と出力ファイルが同じエンコーディングを使用しているように見えますが、端末ではそうではなく、逆も同じです。 – Evert

+0

@ Jean-FrançoisFabreありがとう!ヘッダーはインデックス0と1に含まれていたので、今度はbomなしでutf-8にエンコーディングを変更することで削除されました。 –

答えて

0

テキストファイルにはBOMヘッダーがあり、スライスに含まれています(行[0]、行[1])。私はビジュアルスタジオを使用していて、署名なしでUTF8として保存することでBOMヘッダーを削除しました。

関連する問題