版本: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'
- 似乎对输出没有任何影响。
谢谢。
答案 0 :(得分:3)
由于字符串处理方式的变化,这在 Python 3 中可能要容易得多。
尝试使用指定的编码 open
处理您的文件并将类似文件的文件传递给 csv
库 See 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