2017-01-27 5 views
1

私は最初にカラムを追加する.csvファイルを持っています。 これで、特定のツールが正しく読み込まれるようにエンコーディングを変更する必要があります。Pythonのカウントラインに正しい番号が与えられていない

ファイルには約9,800行があります。列を追加する前と後の行数をカウントすると同じ数値になります。しかし、私がエンコーディングを変更した後に数えると、私は少なくなります。奇妙な部分は、ファイルを開くと、すべての行がそこにあることがわかります。ここで

コードは次のとおりです。

file = open("ob_input.csv") 
outfile = open("ob_output.csv", "w") 
outfile.write("COLUMNS\n") 
print "\n*************** Adding Date Column ***************" 
date = time.strftime("%m/%d/%Y %H:%M:%S,") 
i1 = 0 
for line in file: 
    i1 = i1 + 1 
    if "Asset ID,CI Type" in line: 
     pass 
    else: 
     newline = date + line 
     outfile.write(newline) 

file.close() 
outfile.close() 
time.sleep(2) 
print "Done! Total lines: %d" % i1 
print "\n**************** Changing Encoding ***************" 
sourceEncoding = "utf-8" 
targetEncoding = "utf-8-sig" 
source = open("ob_output.csv") 
target = open("ob_finle.csv", "w") 
target.write(unicode(source.read(), sourceEncoding).encode(targetEncoding)) 

i2 = sum(1 for line in open('ob_finle.csv')) 
print "Done! Total lines: %d" % i2 

私が手出力は次のようになります。

*************** Adding Date Column *************** 
Done! Total lines: 9741 

**************** Changing Encoding *************** 
Done! Total lines: 9729 

9741が正しいです。エンコーディングの変更後にファイルを開くと、9741行になります。なぜそれが少ないのか分かりません。

私がやっていることは、ファイルを変更した後にデータを見逃さないようにすることです。

答えて

0

あなたがターゲットエンコーディングを使用してファイルを開く必要があります。io.openを使用して

from io import open 

i2 = sum(1 for line in open('ob_finle.csv', encoding=targetEncoding)) 

はキーワード引数encodingを可能にし、それがためのPython 2と3での作業になり:Pythonの3

>>> import io 
>>> io.open is open 
True 
+0

"open"を使用すると、 "outfile.write(newline)"という行にこのエラーが発生します。 'ascii'コーデックでは、位置10の文字をエンコードできません9-110:序数が範囲内にない(128) –

+0

申し訳ありませんが、私は少しPythonに少し新しいです。 –

+0

Ok。 Python 2.'u'mystring''では、すべての文字列をUnicodeにする必要があります。 –

関連する問題