python - 比较 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'
Q1。什么是成功比较的面向未来的方式(对于版本 3 等)?Q2。Unicode 是小端的。为什么我得到00
了 Unicode 十六进制的两端?
注意:尝试转换为 Unicode - u'1450'
- 似乎对输出没有任何影响。
谢谢。
解决方案
由于字符串的处理方式发生了变化,这在 Python 3 中可能要容易得多。
尝试open
使用指定的编码来输入您的文件,并将类似文件的文件传递给csv
库查看csv
示例
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 二进制文件并通过 a 读取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
推荐阅读
- memory - 什么是 Rust 取消提交并将内存返回给操作系统的策略?
- python - Python 中的自定义 For 循环
- flutter - 在 android 模拟器中无法访问 localhost:portnumber
- java - 布尔方法返回表达式未在输出控制台中显示结果
- c - 在C中打印带有6个字符的负十六进制
- android - recyclerView 中的过滤列表
- javascript - 我可以使用 PWA 和服务人员重置应用程序的样式吗
- r - 在R中构造循环以根据data.frame B中列值的匹配子集搜索和替换data.frame A中的值?
- swiftui - 如何使用 NavigationLink 从底部而不是从左向右滑动新视图
- javascript - 在滚动时显示元素(向上和向下) - 当页面是静态的(不滚动)时隐藏元素