Python - 减小文件大小的程序正在增加文件大小

hja*_*mig 3 python

对于大学,我正在研究压缩技术.我正在尝试执行的一项实验是用一个字符替换某些威尔士语字母(有双向图).

我认为用一个字符替换两个字符会减小文件大小(无论多少),或者最坏的情况是保持文件大小相同.我已经制作了一个Python脚本来实现这一点,但实际上它增加了文件大小.我测试过的原始文件是~74,400KB,输出程序是~74,700KB.

这是我的Python代码:

replacements = {
        'ch':'ƒ',
        'Ch':'†',
        'CH':'‡',
        'dd':'Œ',
        'Dd':'•',
        'DD':'œ',
        'ff':'¤',
        'Ff':'¦',
        'FF':'§',
        'ng':'±',
        'Ng':'µ',
        'NG':'¶',
        'll':'º',
        'Ll':'¿',
        'LL':'Æ',
        'ph':'Ç',
        'Ph':'Ð',
        'PH':'×',
        'rh':'Ø',
        'Rh':'Þ',
        'RH':'ß',
        'th':'æ',
        'Th':'ç',
        'TH':'ð',
        }
print("Input file location: ")
inLoc = input("> ")
print("Output file location: ")
outLoc = input("> ")

with open(inLoc, "r",encoding="Latin-1") as infile, open(outLoc, "w", encoding="utf-8") as outfile:
for line in infile:
    for src, target in replacements.items():
        line = line.replace(src, target)
    outfile.write(line)
Run Code Online (Sandbox Code Playgroud)

当我在一个非常小的文本文件上测试它几行时,我查看输出,它是按预期的.

INPUT.TXT:

Lle wyt ti heddiw?

Ddoe es i at gogledd Nghymru.
Run Code Online (Sandbox Code Playgroud)

Output.txt的:

¿e wyt ti heŒiw?

•oe es i at gogleŒ µhymru.
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释发生了什么?

gct*_*gct 8

您正在更改文件的编码.latin-1每个字符总是1个字节,但utf-8不是,所以你的一些特殊字符用多个字节编码,导致大小增加.