Python - Kamenicky 编码 (CP-895)

标签 python encoding byte

我需要从文件中读取字节并将它们与字典进行比较(从 Kamenicky 编码到 CP1250)。此代码抛出错误“TypeError:字符串索引必须是整数,而不是 str”。请不要提及“硬编码”路径,因为它们仅用于测试目的。请您帮助我并告诉我这段 Python 代码有什么问题吗?

def Convert(file):
 kamenicky = bytes( {128 : 185, 
        129 : 252, 
        130 : 233, 
        131 : 239, 
        132 : 228, 
        133 : 192, 
        134 : 141, 
        135 : 232, 
        136 : 236, 
        137 : 189, 
        138 : 188, 
        139 : 237, 
        140 : 190, 
        141 : 229,
        142 : 181,
        143 : 178,
        144 : 186,
        145 : 158,
        146 : 142,
        147 : 244,
        148 : 246,
        149 : 211,
        150 : 249,
        151 : 218,
        152 : 253,
        153 : 214,
        154 : 220,
        155 : 138,
        156 : 188,
        157 : 221,
        158 : 216,
        159 : 157,
        160 : 225,
        161 : 237,
        162 : 243,
        163 : 250,
        164 : 242,
        165 : 210,
        166 : 217,
        167 : 212,
        168 : 154,
        169 : 248,
        170 : 224})
 out = ""
 with open("test.csv", 'rb') as f: 
    for byte in f.read():
        if byte in kamenicky:
            out += kamenicky[byte]
        else:
            out += byte

 w = open("new.csv", 'wb')
 w.write(out)
 w.close()

在 C# 中运行的代码几乎相同:

class Kamenicky
{
    Dictionary<byte, byte> kamenicky = new Dictionary<byte, byte> {
        {128, 185}, 
        {129, 252}, 
        {130, 233}, 
        {131, 239}, 
        {132, 228}, 
        {133, 192}, 
        {134, 141}, 
        {135, 232}, 
        {136, 236}, 
        {137, 189}, 
        {138, 188}, 
        {139, 237}, 
        {140, 190}, 
        {141, 229},
        {142, 181},
        {143, 178},
        {144, 186},
        {145, 158},
        {146, 142},
        {147, 244},
        {148, 246},
        {149, 211},
        {150, 249},
        {151, 218},
        {152, 253},
        {153, 214},
        {154, 220},
        {155, 138},
        {156, 188},
        {157, 221},
        {158, 216},
        {159, 157},
        {160, 225},
        {161, 237},
        {162, 243},
        {163, 250},
        {164, 242},
        {165, 210},
        {166, 217},
        {167, 212},
        {168, 154},
        {169, 248},
        {170, 224}
    };

    public void KamenickyToCP1250(string file)
    {
        List<Byte> temp = new List<byte>();
        byte[] ByteFile = File.ReadAllBytes(file);
        foreach (byte BYTE in ByteFile)
        {
            if (kamenicky.ContainsKey(BYTE)) { temp.Add(kamenicky[BYTE]); continue; }
            temp.Add(BYTE);
        }

        File.Delete(file);
        File.WriteAllBytes(file, temp.ToArray());
    }
}

最佳答案

您需要将byte从单字符字符串转换为整数。一种方法如下:

 with open("test.csv", 'rb') as f: 
    for ch in f.read():
       byte = ord(ch)
       ...

关于Python - Kamenicky 编码 (CP-895),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26099447/

相关文章:

python - TensorFlow - nn.max_pooling 极大地增加了内存使用量

Python模数与余数相同?

node.js - Node.js 缓冲区作为 JSON 是可移植存储格式吗?

Java读取西里尔语CSV文件,写入奇怪的字符

java - Linux 如何将文件识别为某种文件类型,以及如何以编程方式更改它?

c++ - 在字节缓冲区中复制一个结构

python - partial_fit Sklearn 的 MLPClassifier

python - CVXPY 二次规划; ArpackNoConvergence 错误

C++ 将数据从 std::string 复制到 std::wstring

c++ - 从 int64 转换为字节数组