为什么我的Python脚本没有读取文件中的所有行,或者为什么不将所有行写入新文件?

时间:2014-04-11 04:24:13

标签: python file-io

我写了一个小脚本来删除文件中的行。问题是它只写了我想要的前42个条目。

代码:

import fileinput
filename = "trip.txt"
phrase = '$GPGLL'
newfile = open("modifed_trip.txt", "w")

with fileinput.input(filename) as f:
    for line in f:
        if phrase in line:
            newfile.write(line)
newfile.close()

文件大小= 4,209 KB

行数= 100825

为什么这个脚本没有读取文件中的所有行,或者为什么不将所有行写入新文件?

P.S。对于与短语匹配的前42行,这似乎选择了我要复制到新文件中的行。

编辑: 根据@ NimaZera的评论,我改变了这种影响:

with open("trip2-Copy2.txt") as f:
    content = f.readlines()
    for line in content:
        if phrase in line:
            newfile.write(line)
newfile.close()

这给我留下了这个错误:

UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 4283: character maps to <undefined>

1 个答案:

答案 0 :(得分:1)

您的文件似乎使用非ASCII编码。除非您的Python脚本恰好使用与文件相同的编码进行编码,否则您在打开文件时需要声明编码。

在Python 3中,默认编码为UTF-8;在Python 2中,您需要在脚本的顶部声明该编码:

# -*- coding: <utf-8> -*-

或在打开文件时显式使用该编码:

with codecs.open("trip-Copy2.txt", "r", encoding="utf-8") as f:
    # do something