【问题标题】:Convert string value read from file to ASCII in python在python中将从文件读取的字符串值转换为ASCII
【发布时间】:2017-11-10 11:18:37
【问题描述】:

我将详细描述我的问题:

首先我从 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]

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

\x00123 = 00313233

我已尝试使用 binascii.hexlify 命令,但这给了我读取字符串中 每个字符 的 ASCII 等价物,即:

binascii.hexlify(值) = 5c783030313233

如果我这样做:

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

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

有什么方法可以做我想做的事吗?谢谢!

【问题讨论】:

    标签: python hex ascii


    【解决方案1】:

    创建字典时为什么不添加转换?使用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
    

    【讨论】:

    • 感谢您的回复。但是,我想要的是 \x00123 显示为 00313233,即 \x00 = 0x00, 1 = 0x31, 2 = 0x32, 3 = 0x33。再举一个我想要的例子,如果从文件中读取的值是 12\x003,那么我希望它被翻译为 31320033,即 1 = 0x31, 2 = 0x32, \x00 = 0x00, 3 = 0x33 .所以如果两个字符前面有 \x,那么它应该被解释为一个十六进制数字,而不是被翻译成 ASCII。这正是 binascii.hexlify 所做的,但如果从外部文件读取值,它似乎不起作用。
    • 我明白了,在这种情况下使用.decode('string_escape')。我已经更新了脚本。
    猜你喜欢
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 2021-02-27
    相关资源
    最近更新 更多