Python Counting Line没有给出正确的数字

时间:2017-01-27 16:56:35

标签: python python-2.7 count

我有一个.csv文件,我在其中添加了一个列。 然后,我需要更改某个工具的编码才能正确读取

该文件大约有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行。我不知道为什么它的数量减少了。

我正在做的是确保在更改文件后,我不会错过数据。

1 个答案:

答案 0 :(得分:0)

您需要使用目标编码打开文件:

from io import open

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

使用io.open允许关键字参数encoding并使其在Python 2和3中有效,因为:

Python 3:

>>> import io
>>> io.open is  open
True