Итак, я читаю файл и управляю им с помощью:
base_file = open(path+'/'+base_name, "r")
lines = base_file.readlines()
После этого я ищу и нахожу начало строки «raw_data».
if re.match("\s{0,100}raw_data: ",line):
split_line = line.split("raw_data:")
print(split_line)
raw_string = split_line[1]
Одним из примеров raw_data является :
raw_data: "& \ 276! \ 300 \ 307 = \ 277 \" O \ 271 \ 277vH9? J? \ 345? @ \ 243 \ 264 = \ 350 \ 034 \ 345 \ 277 \ 260 \ 345 \ 033 \ 300 \ 023 \ 017 (@z | \ 273 \ 277L \} \ 277 \ 210 \\ 031 \ 300 \ 213 \ 263z \ 277 \ 302 \ 241 \ 033 \ 300 \ 000 \ 207 \ 323 \ 277 \ 247Oh> j \ 354 \ 215 @ \ 364 \ 305 \ 201 \ 276 \ 361 + \ 202@t: \ 304 \ 277 \ 344 \ 231 \ 243 @ \ 225k \ 002 \ 300vw \ 262 \ 277 \ 362 \ 220j \ 300 \ "(\ 337 \ 276 \ 354b8 \ 300 \ 230 \ 347H \ 300 \ 201 \ 320 \ 204 \ 300S; N \ 300Z0G \ 300> j \ 210 \ 000 @ \ 034 \ 014 \ 220 @ \ 231 \ 330J @ \ 223 \ 025 \ 236 @ \ 006 \ 332 \ 230 \ 276 \ 227 \ 273 \ n \ 277 \ 353 @, @ \ 202 \ 205 \ 215 \ 277 \ 340 \ 356 \ 022 \ 300 / \ 223 \ 035 \ 277 \ 331 \ 277 \ 362 \ 276a \ 350 \ 013 @) \ 353 \ 276 \ 277v6 \ 316 \ 277K \ 326 \ 207 \ 300`2) \ 300 \ 004 \ 014Q \ 300 \ 340 \ 267 \ 271 \ 300MV \ 305 \ 300 \ 327 \ 010 \ 207 \ 300j \ 346o \ 300 \ 377 \ 260 \ 216 \ 300 [\ 332g \ 300 \ 336 \ 266 \ 003 \ 300 \ 320S \ 272? 6 \ 300Y @ \ 356 \ 250 \ 034 \ 300 \ 367 \ 277 & \ 300 \ 335Uq> o \ 010 & \ 300r \ 277 \ 252 \ 300U \ 314 \ 243 \ 300 \ 253d \ 377 \ 300 "
И raw_string будет
print(raw_data)
"& \ 276! \ 300 \ 307 = \ 277 \" O \ 271 \ 277vH9? J? \ 345? @ \ 243 \ 264 = \ 350 \ 034 \ 345 \ 277 \ 260 \ 345 \ 033 \ 300 \ 023 \ 017 (@z | \ 273 \ 277L \} \ 277 \ 210 \\ 031 \ 300 \ 213 \ 263z \ 277 \ 302 \ 241 \ 033 \ 300 \ 000 \ 207 \ 323 \ 277 \ 247Oh> j \ 354 \ 215 @ \ 364 \ 305 \ 201 \ 276 \ 361 + \ 202@t: \ 304 \ 277 \ 344 \ 231 \ 243 @ \ 225k \ 002 \ 300vw \ 262 \ 277 \ 362 \ 220j \ 300 \ "(\ 337 \ 276 \ 354b8 \ 300 \ 230 \ 347H \ 300 \ 201 \ 320 \ 204 \ 300S; N \ 300Z0G \ 300> j \ 210 \ 000 @ \ 034 \ 014 \ 220 @ \ 231 \ 330J @ \ 223 \ 025 \ 236 @ \ 006 \ 332 \ 230 \ 276 \ 227 \ 273 \ n \ 277 \ 353 @, @ \ 202 \ 205 \ 215 \ 277 \ 340 \ 356 \ 022 \ 300 / \ 223 \ 035 \ 277 \ 331 \ 277 \ 362 \ 276a \ 350 \ 013 @) \ 353 \ 276 \ 277v6 \ 316 \ 277K \ 326 \ 207 \ 300`2) \ 300 \ 004 \ 014Q \ 300 \ 340 \ 267 \ 271 \ 300MV \ 305 \ 300 \ 327 \ 010 \ 207 \ 300j \ 346o \ 300 \ 377 \ 260 \ 216 \ 300 [\ 332g \ 300 \ 336 \ 266 \ 003 \ 300 \ 320S \ 272? 6 \ 300Y @ \ 356 \ 250 \ 034 \ 300 \ 367 \ 277 & \ 300 \ 335Uq> o \ 010 & \ 300r \ 277 \ 252 \ 300U \ 314 \ 243 \ 300 \ 253d \ 377 \ 300 "
Если я попытался прочитать этот файл, я получу один символ к одному символу даже для escape-символов. Итак, мой вопрос в том, как преобразовать этот простой текст в строку utf-8, чтобы я мог иметь один символ при чтении \ 300, а не 4 символа.
Я попытался передать "encondig = utf-8" в метод открытия файла, но не работает.
Я сделал тот же пример с передачей raw_data в качестве переменной, и он работает правильно.
RAW_DATA = "&\276!\300\307 =\277\"O\271\277vH9?j?\345?@\243\264=\350\034\345\277\260\345\033\300\023\017(@z|\273\277L\\}\277\210\\\031\300\213\263z\277\302\241\033\300\000\207\323\277\247Oh>j\354\215@\364\305\201\276\361+\202@t:\304\277\344\231\243@\225k\002\300vw\262\277\362\220j\300\"(\337\276\354b8\300\230\347H\300\201\320\204\300S;N\300Z0G\300<I>>j\210\000@\034\014\220@\231\330J@\223\025\236@\006\332\230\276\227\273\n\277\353@,@\202\205\215\277\340\356\022\300/\223\035\277\331\277\362\276a\350\013@)\353\276\277v6\316\277K\326\207\300`2)\300\004\014Q\300\340\267\271\300MV\305\300\327\010\207\300j\346o\300\377\260\216\300[\332g\300\336\266\003\300\320S\272?6\300Y@\356\250\034\300\367\277&\300\335Uq>o\010&\300r\277\252\300U\314\243\300\253d\377\300"
print(f"Qnt -> {len(RAW_DATA)}") # Qnt -> 256
print(type(RAW_DATA))
at = 0
total = 0
while at < len(RAW_DATA):
fin = at+4
substrin = RAW_DATA[at:fin]
resu = FourString_float(substrin)
at = fin
В этом примере \ 300 - это только один символ.
Надеюсь, кто-нибудь мне поможет.