相同的代码在文件大小方面有所不同

时间:2014-11-10 15:11:53

标签: python

我正在运行一个简单的代码来从输入文件中的行中选择文本,并将该文本写入输出文件。

with open('inputpath', 'r') as vh_datoteka, open('outputpath', 'w') as iz_datoteka:
        for line in vh_datoteka:
            NMEA = str(line) [24:-39]
            iz_datoteka.write (NMEA + '\n')

我需要处理的数据看起来像这样(两行):

2012-05-01
23:59:59.007;!AIVDM,1,1,0,,33cm>k100013vglDPkW1QSin0000,0*6E;2470028;1;NULL;2012-05-01
21:59:59.007 2012-05-01
23:59:59.007;!AIVDM,1,1,0,,19NSBn001nQ8<7vDhIq43C<2280F,0*07;2470032;1;NULL;2012-05-01
21:59:59.007 ...

由于我要处理大文件(~2GB),我首先在一个大文件的一小部分上测试代码(只需先复制1000行左右,然后将它们保存到测试文件中)。

代码完美无缺,我得到了我想要的结果:

&#33;AIVDM,1,1,0,,33cm>k100013vglDPkW1QSin0000,0*6E;
!AIVDM,1,1,0,,19NSBn001nQ8<7vDhIq43C<2280F,0*07;

之后我尝试在整个数据上使用代码并得到非常不同的输出:

2 3 : 5 9 : 5 9 . 0 0 7 ; ! A I V D M , 1 , 1 , 0 , , 3 3 c m > k 1 0
0 0 1 3 v g l D P k W 1 Q S i n 0 0 0 0 , 0 * 6 E ; 2 4 7 0 0 2 8 ; 1
; N U L L ; 2 0 1 2 -   3 : 5 9 : 5 9 . 0 0 7 ; ! A I V D M , 1 , 1 ,
0 , , 1 9 N S B n 0 0 1 n Q 8 < 7 v D h I q 4 3 C < 2 2 8 0 F , 0 * 0
7 ; 2 4 7 0 0 3 2 ; 1 ; N U L L ; 2 0 1 2 - ...

我一直在试图弄清楚这种行为的原因,并且已经没有想法,显然需要帮助。

1 个答案:

答案 0 :(得分:1)

感谢Tobias的评论。

显然大数据文件是UTF16-LE,这就是问题所在。我纠正了python代码,用utf16读取并写入utf8,这就是诀窍。

with codecs.open('inputpath', 'r', encoding='utf-16-le') as vh_datoteka, open('outputpath', 'w') as iz_datoteka:
        for line in vh_datoteka:
            NMEA = str(line) [24:-39]
            iz_line = NMEA + '\n'
            iz_datoteka.write (iz_line.encode('utf-8'))