0

我正在编写一个程序来迭代我的 Robocopy-Log (>25 MB)。到目前为止还没有准备好,因为我遇到了一个问题。

问题是,在我的日志迭代 ~1700 行之后 -> 我得到一个“UnicodeError”:

Traceback (most recent call last):
  File "C:/Users/xxxxxx.xxxxxx/SkyDrive/#Python/del_robo2.py", line 6, in <module>
    for line in data:
  File "C:\Python33\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 7869: character maps to <undefined>

该程序如下所示:

x="Error"
y=1
arry = []
data = open("Ausstellungen.txt",mode="r")
for line in data:
    arry = line.split("\t")
    print(y)
    y=y+1
    if x in arry:
        print("found")
        print(line)
data.close()   

如果我将 txt 文件减少到 1000 行,那么程序就可以工作。如果我删除第 1500 到 3000 行并再次运行,我会再次收到第 1700 行附近的 unicode 错误。

那么我犯了一个错误还是这是Python的一些内存限制问题?

4

2 回答 2

1

鉴于您的数据和片段,如果这是一个内存问题,我会感到惊讶。更有可能是编码:Python 使用系统的默认编码来读取文件,即“cp1252”(默认的 MS Windows 编码),但文件包含无法以该编码解码的字节序列/字节。文件实际编码的候选者可能是“latin-1”,您可以通过说让 Python 3 使用它

open("Ausstellungen.txt",mode="r", encoding="latin-1")

一个可能类似的问题是CP-1252/ANSI 读取上的 Python 3 扼流圈。关于整件事的精彩讨论在这里: http: //nedbatchelder.com/text/unipain.html

于 2013-06-26T11:48:37.857 回答
0

Python 将所有文件数据解码为 Unicode 值。您没有指定要使用的编码,因此 Python 使用您系统的默认编码,即cp1252Windows Latin codepage

但是,这是您的文件数据的错误编码。您需要指定要使用的显式编解码器:

data = open("Ausstellungen.txt",mode="r", encoding='UTF8')

不幸的是,您需要自己弄清楚要使用什么编码。我使用 UTF-8 作为示例编解码器。

请注意,某些版本的 RoboCopy 在生成有效输出时存在问题

如果您还不知道 Unicode 是什么,或者想了解编码,请参阅:

您看到文件的不同部分出现错误的原因是您的数据包含多个 cp1252 编码无法处理的代码点。

于 2013-06-26T11:49:31.943 回答