将 Unicode 字符串与字节字符串进行比较

时间:2020-12-19 18:27:24

标签: python python-2.7 unicode

版本:Python 2.7

我正在从 Unicode CSV 文件中读取值并循环查找特定的产品代码 - 一个字符串。变量 p 来自 CSV 文件。

sku = '1450'             # sku can contain spaces.
print p, '|', sku
print p == '1450'
print binascii.hexlify(p), '|', binascii.hexlify(sku)
print binascii.hexlify(p) == binascii.hexlify(sku)
print 'repr(p): ', repr(p)

结果

1450 | 1450
False
003100340035003000 | 31343530
False
repr(p): '\x001\x004\x005\x000\x00'

第一季度。成功比较的面向未来的方法是什么(对于版本 3 等)? Q2。 Unicode 是小端的。为什么我在 Unicode 十六进制的两端都有 00

注意:尝试转换为 Unicode - u'1450' - 似乎对输出没有任何影响。

谢谢。

1 个答案:

答案 0 :(得分:3)

由于字符串处理方式的变化,这在 Python 3 中可能要容易得多。

尝试使用指定的编码 open 处理您的文件并将类似文件的文件传递给 csvSee csv Examples

import csv
with open('some.csv', newline='', encoding='UTF-16LE') as fh:
    reader = csv.reader(fh)
    for row in reader:  # reader is iterable
        # work with row

经过一些评论,读取尝试来自 FTP 服务器。
将读取的字符串切换为 FTP binary 并读取 io.TextIOWrapper() 可能会奏效

现在有更多上下文管理器!:

import io
import csv
from ftplib import FTP

with FTP("ftp.example.org") as ftp:
    with io.BytesIO() as binary_buffer:
        # read all of products.csv into a binary buffer
        ftp.retrbinary("RETR products.csv", binary_buffer.write)
        binary_buffer.seek(0)  # rewind file pointer
        # create a text wrapper to associate an encoding with the file-like for reading
        with io.TextIOWrapper(binary_buffer, encoding="UTF-16LE") as csv_string:
            for row in csv.reader(csv_string):
                # work with row