我需要从文件中读取字节并将它们与字典进行比较(从 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/