Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python计数行没有给出正确的数字_Python_Python 2.7_Count - Fatal编程技术网

Python计数行没有给出正确的数字

Python计数行没有给出正确的数字,python,python-2.7,count,Python,Python 2.7,Count,我有一个.csv文件,在该文件的开头添加了一列。 然后,我需要更改特定工具的编码以正确读取 该文件大约有9800行。当我在添加列之前和之后计算行数时,得到的数字是相同的。但是,当我改变编码后计数时,我得到的更少。奇怪的是,当我打开文件时,我可以看到所有的行都在那里 代码如下: file = open("ob_input.csv") outfile = open("ob_output.csv", "w") outfile.write("COLUMNS\n") print "\n**********

我有一个.csv文件,在该文件的开头添加了一列。 然后,我需要更改特定工具的编码以正确读取

该文件大约有9800行。当我在添加列之前和之后计算行数时,得到的数字是相同的。但是,当我改变编码后计数时,我得到的更少。奇怪的是,当我打开文件时,我可以看到所有的行都在那里

代码如下:

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行。我不知道为什么它的计数越来越少


我要做的是确保更改文件后不会丢失数据。

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

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

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

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

当我使用“open”时,我在“outfile.write(newline)”行中得到了这个错误:“ascii”编解码器无法对109-110位置的字符进行编码:序号不在范围(128)对不起,我对pythonOk有点陌生。您需要在Python2中将所有字符串设置为unicode。
u'mystring'
。或者只使用Python3.:)好极了!非常感谢您的帮助!:)当我使用“open”时,我在“outfile.write(newline)”行中得到了这个错误:“ascii”编解码器无法对109-110位置的字符进行编码:序号不在范围(128)对不起,我对pythonOk有点陌生。您需要在Python2中将所有字符串设置为unicode。
u'mystring'
。或者只使用Python3.:)好极了!非常感谢您的帮助!:)