从 Python 中的 csv 文件读取字符串时如何避免双重转义(\\)?

塞卡里卡

这是一个运行良好的测试代码:

x = "b'\x12'"
y = x[2:-1]
z = y.encode('raw_unicode_escape')
print (z, int.from_bytes(z, 'big'))

这给出了预期的结果:

b'\x12' 18

现在我想做同样的事情,除了将初始字符串存储在 csv 文件中:

  1. 我创建了一个test.csv包含以下内容的文件:

     name,value
     item,"b'\x12'"
    
  2. 我创建了一个改编的测试代码:

     import csv
    
     with open("test.csv", 'r') as csvfile:
         reader = csv.DictReader(csvfile)
    
         for row in reader:
             if row["name"] == "item":
                 x = row["value"]
    
     print ("x:", x, type(x))
     y = x[2:-1]
     z = y.encode('raw_unicode_escape')
     print ("z:", z, int.from_bytes(z, 'big'))
    

这使:

x: b'\x12' <class 'str'>
z: b'\\x12' 1551380786

我应该怎么做才能避免双 \ 并获得与第一个测试代码相同的结果?

(目的是从该字节的文字 str 表示中获取实际字节,当文字 str 表示存储在 csv 文件中时)

乔兰·比斯利

ascii 编解码器不了解 \x## 编码,因此它成为文字 \ 后跟 x 后跟 2 个数字......文字 \ 在 python 中表示为 2 个反斜杠。

处理它的一种方法是使用 raw_unicode_escape 将其转换回字节,然后使用普通的 unicode_escape 将其转换回字符串

>>> s = "\\x12"
>>> type(s),repr(s)
(<class 'str'>, "'\\\\x12'")
>>> s_bytes=s.encode("raw_unicode_escape")|
>>> type(s_bytes),repr(s_bytes)
(<class 'bytes'>, "b'\\\\x12'")
>>> s2 = s_bytes.decode("unicode_escape")
type(s2),repr(s2)
(<class 'str'>, "'\\x12'")
>>> s2
'\x12'
>>> print(s2)

你也可以用正则表达式替换做这样的事情

import re
s = "\\x12"
s2 = re.sub(r"\\x(\d{2})",lambda m:chr(int(m.group(1),16)),s)

有很多方法可以解决这个问题,但这里有两种方法

但一般来说,使用 csv 存储二进制数据是一个坏主意.. 自己编码也可能不是最佳实践

您应该使用 base64 之类的东西将二进制数据转换为 ascii,或者在编写将表示 \x12 的文件时应该使用实际编码,但是您希望它被表示

如果真的保证它是一个简单的python对象的文字,你可以使用

import ast
a_byte_str = ast.literal_eval("b'\\x12'")
print(a_byte_str,a_byte_str[0])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

用于在csv文件中存储的Java转义字符串

在python中解析csv字符串

如何使用Python清除csv文件行中的空字符串

如何从字符串中读取CSV?

在csv文件中写入字符串时,如何避免重复的字符串?

在python中读取csv文件时如何打印所需的行

在Python中从csv文件生成字符串集

Python替换CSV文件中的字符串

在python中读取.tsv文件时忽略字符串

Python:如何从词典列表中创建csv字符串(无文件)?

如何使用python从csv文件的所有列中过滤字符串

如何使用python计算csv文件列中字符串短语的词频?

如何在Python中读取字符串时排除NoneType类

如何使用python脚本删除CSV文件中多行通用的特定字符串?

如何将csv文件中的特定字符串放入列表中-python 3.4

如何从.INI文件中读取字符串,然后从文本文件中读取该字符串,并使用Python打印整行?

目标C:从CSV文件中读取字符串

从文本文件中读取字符串作为python中的变量

读取csv,但跳过字符串中的转义逗号

python-列表以字符串形式从csv中读取

当其中有HTML转义字符串时,使用python(pandas)读取CSV文件

如何在两个大的csv文件中找到字符串中的子字符串(Python)

Python在csv文件中找不到字符串

从 Python 中的 csv 文件读取时将字符串转换为整数/浮点数

为什么我在 Python 中读取 csv 文件时得到的是字符串而不是字典?

如何从 Python 中的 csv 文件读取字典列表?

如何在python中读取csv文件时添加行

在python中读取字符串

如何在python中解析生成的csv字符串