在python中将从文件读取的字符串值转换为ASCII

时间:2017-11-10 11:18:37

标签: python hex ascii

我将详细描述我的问题:

首先,我正在从CSV文件中读取一些值:

def import_csv(my_csv_file):
  with open(my_file, mode='r') as infile:
    reader = csv.reader(infile)
    next(reader) # Ignore the first row
    return dict((rows[0]+struct.pack('!L',int(rows[1])), [rows[2],rows[3]]) for rows in reader)

然后我将此函数称为:

DB = import_csv(my_csv_file)

my_csv_file中的每一行都具有以下格式:

40.1.1.2,1,\ x00123,bbbbbbbbbbbbbbbb

导入后,我得到一个dict元素:

value = DB['40.1.1.2\x00\x00\x00\x01'][0]

但现在我需要将(包含字符串\ x00123)转换为其ASCII等效值,其中前缀为\ x的任何两个字符表示HEX值。也就是说,对于上面的例子,我想要

\ x00123 = 00313233

我尝试过使用binascii.hexlify命令,但是它在读取字符串中给出了等效于每个字符的ASCII,即:

binascii.hexlify(value)= 5c783030313233

如果我这样做:

value_0 = '\x00123'
print binascii.hexlify(value_0)

我得到了所需的结果,即00313233.所以看起来在读取文件中的值后,十六进制转义字符\ x被视为字符串中的值。请注意,包括例如\ x00部分是在我将从文件中读取的值中包含不可打印的字符。

有什么办法可以做我想要的吗?谢谢!

1 个答案:

答案 0 :(得分:0)

为什么不在创建字典时添加转换?使用decode('string_escape')处理任何\x,然后.encode('hex')将其转换回十六进制:

import csv
import struct

def import_csv(my_csv_file):
  with open(my_csv_file, mode='rb') as infile:
    reader = csv.reader(infile)
    next(reader) # Ignore the first row
    return dict((row[0] + struct.pack('!L', int(row[1])), [row[2].decode('string_escape').encode('hex'), row[3]]) for row in reader)

DB = import_csv('input.csv')

value = DB['40.1.1.2\x00\x00\x00\x01'][0]
print value

这会显示:

00313233